国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結(jié)構(gòu)】從順序表到ArrayList類

這篇具有很好參考價值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)】從順序表到ArrayList類。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【數(shù)據(jù)結(jié)構(gòu)】從順序表到ArrayList類,數(shù)據(jù)結(jié)構(gòu),java,開發(fā)語言,spring,數(shù)據(jù)挖掘,人工智能,計算機視覺

1.線性表

1.1線性表的概念

線性表(linear list)是n個具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實際中廣泛使用的數(shù)據(jù)結(jié)構(gòu),常見的線性表:順序表、鏈表、棧、隊列…
線性表在邏輯上是線性結(jié)構(gòu),也就說是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的,線性表在物理上存儲時,通常以數(shù)組和鏈式結(jié)構(gòu)的形式存儲。
如圖所示:
【數(shù)據(jù)結(jié)構(gòu)】從順序表到ArrayList類,數(shù)據(jù)結(jié)構(gòu),java,開發(fā)語言,spring,數(shù)據(jù)挖掘,人工智能,計算機視覺

2.順序表

2.1順序表的概念

順序表是用一段物理地址連續(xù)的存儲單元依次存儲數(shù)據(jù)元素的線性結(jié)構(gòu),一般情況下采用數(shù)組存儲。在數(shù)組上完成數(shù)據(jù)的增刪查改。

2.2順序表的實現(xiàn)

因為順序表存儲數(shù)據(jù)是在一段連續(xù)的物理地址依次存儲的線性結(jié)構(gòu),我們一般采用數(shù)組的形式來進行存儲,通過在數(shù)組中完成數(shù)據(jù)的增刪查改的操作。
2.2.1數(shù)組的創(chuàng)建

public class MyArrayList {
//定義一個未被初始化的數(shù)組elem
    public int[] elem;
    //定義一個記錄該數(shù)組存了多少容量
    public int size;
    //將該容量設(shè)置為一個常量,為了到后面調(diào)構(gòu)造方法的時候初始化數(shù)組的大小
    public static final int DEFAULT_CAPACITY = 5;
    //調(diào)用構(gòu)造函數(shù)的時候初始化數(shù)組的大小,而size成員變量不需要初始化,因為一開始未被初始化,默認初始化為0.
    public MyArrayList() {
        this.elem = new int[DEFAULT_CAPACITY];
    }
}

2.2.2提供一些接口

public interface Ilist {
    // 新增元素,默認在數(shù)組最后新增
    void add(int data);
    // 在 pos 位置新增元素
    void add(int pos, int data);
    // 判定是否包含某個元素
    boolean contains(int toFind);
    // 查找某個元素對應(yīng)的位置
    int indexOf(int toFind);
    // 獲取 pos 位置的元素
    int get(int pos);
    // 給 pos 位置的元素設(shè)為 value
    void set(int pos, int value);
    //刪除第一次出現(xiàn)的關(guān)鍵字key
    void remove(int toRemove);
    // 獲取順序表長度
    int size();
    // 清空順序表
    void clear();
    //打印這個數(shù)組的內(nèi)容
     void display();
     //判斷是否空間滿了
    boolean isFuul();
    boolean isEmpty();
}

2.2.3提供一些異常類
1.判斷數(shù)組中是否為空的異常
2.判斷下標是否合法的異常

//1.判斷數(shù)組中是否為空的異常
public class EmptyException extends RuntimeException{
    public EmptyException() {
    }
    public EmptyException(String message) {
        super(message);
    }
}
//2.判斷下標是否合法的異常
public class PosException extends RuntimeException{
    public PosException() {
    }
    public PosException(String message) {
        super(message);
    }
}

2.3接口的實現(xiàn)(對數(shù)組增刪查改操作)

2.3.1 新增元素,(默認在數(shù)組最后新增)

 //往最后位置插入數(shù)據(jù)
    public void add(int data) {
        //判斷空間是否滿了,如果滿了就擴容2倍
        if(isFuul()) {
            elem = Arrays.copyOf(elem,2*elem.length);
            System.out.println("擴容成功");
        }
        elem[size] = data;
        size++;
    }
    @Override
    public boolean isFuul() {
        return size == elem.length;
    }

2.3.2打印數(shù)組全部內(nèi)容

//打印數(shù)組全部內(nèi)容
    @Override
    public void display() {
        for (int i = 0; i < size; i++) {
            System.out.println(elem[i]);
        }
    }

2.3.3在 pos 位置新增元素

 // 在 pos 位置新增元素
    @Override
    public void add(int pos, int data) {
        //判斷pos是否合法
        checkPosOfAdd(pos);
        //判斷是否需要擴容
        if(isFuul()) {
            elem = Arrays.copyOf(elem,2*elem.length);
        }
        //最后在pos位置插入新元素
        for(int i=size-1;i>=pos;i--) {
            elem[i+1] = elem[i];
        }
        elem[pos] = data;
        size++;
    }
    //判斷pos是否合法的方法,在順序表中插入數(shù)據(jù)的時候,插入的位置前面必須要有數(shù)據(jù)。
    private void checkPosOfAdd (int pos) {
        if(pos<0 || pos>size) {
            throw new PosException("pos的位置不合法:"+pos);
        }
    }

2.3.4判定是否包含某個元素

// 判定是否包含某個元素
    //直接遍歷數(shù)組然后一一和目標元素比較,有就返回true,沒有就返回false。
    @Override
    public boolean contains(int toFind) {
        for(int i=0;i< elem.length;i++) {
            if(toFind == elem[i]) {
                return true;
            }
        }
        return false;
    }

2.3.5查找某個元素對應(yīng)的位置

// 查找某個元素對應(yīng)的位置
    //直接遍歷數(shù)組然后一一和目標元素比較,有就返回對應(yīng)的下標,沒有就返回-1。
    @Override
    public int indexOf(int toFind) {
        for(int i=0;i< elem.length;i++) {
            if(toFind == elem[i]) {
                return i;
            }
        }
        return -1;
    }

2.3.6 獲取 pos 位置的元素 如果順序表為空返回-1或者拋出異常,不為空返回pos位置的元素

// 獲取 pos 位置的元素 如果順序表為空返回-1或者拋出異常,不為空返回pos位置的元素
    @Override
    public int get(int pos) {
        //判斷pos位置是否合法
        checkPosOfGet(pos);
        //判斷這個順序表是否為空
        if(isEmpty()) {
            throw new EmptyException("順序表為空");
        }
        return elem[pos];
    }

2.3.7判斷順序表是否為空

 //判斷順序表是否為空
    @Override
    public boolean isEmpty() {
        return size == 0;
    }
    //判斷pos合不合法的方法
    private void checkPosOfGet (int pos) {
        if(pos<0 || pos>size) {
            throw new PosException("pos的位置不合法:"+pos);
        }
    }

2.3.8給 pos 位置的元素設(shè)為 value

 // 給 pos 位置的元素設(shè)為 value
    @Override
    public void set(int pos, int value) {
        //判斷pos是否合法
        checkPosOfSet(pos);
        //判斷順序表是否為空
        if(isEmpty()) {
            throw new EmptyException("順序表為空");
        }
        //修改pos位置的內(nèi)容
        this.elem[pos] = value;
    }
    private void checkPosOfSet (int pos) {
        if (pos < 0 || pos > size) {
            throw new PosException("pos的位置不合法:" + pos);
        }
    }

2.3.9刪除元素 如果順序表中為空,則刪不了,之后我們先找到我們要刪的這個數(shù)。

//刪除元素 如果順序表中為空,則刪不了,之后我們先找到我們要刪的這個數(shù)。
    @Override
    public void remove(int toRemove) {
        //判斷順序表中是否為空
        if(isEmpty()) {
            throw new EmptyException("順序表為空");
        }
        //找到我們需要刪的這個數(shù)
        int indexof = indexOf(toRemove);
        for(int i = indexof;i<size-1;i++) {
            elem[i] = elem[i+1];
        }
        size--;
    }

2.3.10獲取順序表長度 直接返回size

// 獲取順序表長度 直接返回size
    @Override
    public int size() {
        return this.size;
    }

2.3.11清空順序表

// 清空順序表
    @Override
    public void clear() {
         size = 0;
    }

3.ArrayList簡介

在集合框架中,ArrayList是一個普通的類,實現(xiàn)了List接口,具體框架圖如下:
【數(shù)據(jù)結(jié)構(gòu)】從順序表到ArrayList類,數(shù)據(jù)結(jié)構(gòu),java,開發(fā)語言,spring,數(shù)據(jù)挖掘,人工智能,計算機視覺
【說明】

  1. ArrayList是以泛型方式實現(xiàn)的,使用時必須要先實例化
  2. ArrayList實現(xiàn)了RandomAccess接口,表明ArrayList支持隨機訪問
  3. ArrayList實現(xiàn)了Cloneable接口,表明ArrayList是可以clone的
  4. ArrayList實現(xiàn)了Serializable接口,表明ArrayList是支持序列化的
  5. 和Vector不同,ArrayList不是線程安全的,在單線程下可以使用,在多線程中可以選擇Vector或者CopyOnWriteArrayList
  6. ArrayList底層是一段連續(xù)的空間,并且可以動態(tài)擴容,是一個動態(tài)類型的順序表
4. ArrayList使用

4.1ArrayList的構(gòu)造

1.ArrayList() 無參構(gòu)造:

List<Integer> list1 = new ArrayList<>();

2.ArrayList(int initialCapacity)指定順序表初始容量:

List<Integer> list2 = new ArrayList<>(5);

3.ArrayList(Collection<? extends E> c) 利用其他 Collection 構(gòu)建 ArrayList:相當于傳入其他的ArrayList順序表,使得這個順序表的大小容量與數(shù)據(jù)類型和傳入的順序表是一致的。

List<Integer> list3 = new ArrayList<>(list2);

4.2 ArrayList的方法

4.2.1尾插法

public static void main(String[] args) {
        List<Integer> list2 = new ArrayList<>(5);
        list2.add(1);
        list2.add(2);
        list2.add(3);
        list2.add(4);
        list2.add(5);
        System.out.println(list2);
    }

結(jié)果顯示:
【數(shù)據(jù)結(jié)構(gòu)】從順序表到ArrayList類,數(shù)據(jù)結(jié)構(gòu),java,開發(fā)語言,spring,數(shù)據(jù)挖掘,人工智能,計算機視覺
4.2.2將目標值插到指定index位置

 list2.add(1,6);
        System.out.println(list2);

結(jié)果顯示:
【數(shù)據(jù)結(jié)構(gòu)】從順序表到ArrayList類,數(shù)據(jù)結(jié)構(gòu),java,開發(fā)語言,spring,數(shù)據(jù)挖掘,人工智能,計算機視覺
4.2.3刪除 index 位置元素

 list2.remove(2);
        System.out.println(list2);

結(jié)果顯示:
【數(shù)據(jù)結(jié)構(gòu)】從順序表到ArrayList類,數(shù)據(jù)結(jié)構(gòu),java,開發(fā)語言,spring,數(shù)據(jù)挖掘,人工智能,計算機視覺
4.2.4獲取下標 index 位置元素

System.out.println(list2.get(3));

結(jié)果顯示:
【數(shù)據(jù)結(jié)構(gòu)】從順序表到ArrayList類,數(shù)據(jù)結(jié)構(gòu),java,開發(fā)語言,spring,數(shù)據(jù)挖掘,人工智能,計算機視覺

4.3 ArrayList的遍歷

ArrayList 可以使用三方方式遍歷:for循環(huán)+下標、foreach。
1.for循環(huán)+下標:

 public static void main(String[] args) {
        List<Integer> list2 = new ArrayList<>(5);
        list2.add(1);
        list2.add(2);
        list2.add(3);
        list2.add(4);
        list2.add(5);
        for (int i = 0; i < list2.size(); i++) {
            System.out.print(list2.get(i)+" ");
        }
    }

結(jié)果顯示:
【數(shù)據(jù)結(jié)構(gòu)】從順序表到ArrayList類,數(shù)據(jù)結(jié)構(gòu),java,開發(fā)語言,spring,數(shù)據(jù)挖掘,人工智能,計算機視覺
2.foreach:

public static void main(String[] args) {
        List<Integer> list2 = new ArrayList<>(5);
        list2.add(1);
        list2.add(2);
        list2.add(3);
        list2.add(4);
        list2.add(5);
        System.out.println("foreach循環(huán)下:");
        for (Integer integer:list2) {
            System.out.print(integer+" ");
        }
    }

結(jié)果顯示:
【數(shù)據(jù)結(jié)構(gòu)】從順序表到ArrayList類,數(shù)據(jù)結(jié)構(gòu),java,開發(fā)語言,spring,數(shù)據(jù)挖掘,人工智能,計算機視覺
最后,ArrayList是一個動態(tài)類型的順序表,不夠空間會自動擴容。

好久沒更新了,在這我向我的老鐵們道個歉,從今天開始更新關(guān)于java的數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,希望大家多多支持。????????????????????????????文章來源地址http://www.zghlxwxcb.cn/news/detail-821003.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】從順序表到ArrayList類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu) 模擬實現(xiàn)ArrayList順序表

    目錄 一、順序表中的接口 二、順序表中的方法實現(xiàn) (1)display方法 (2)add方法 1、不指定下標位置插入 2、指定下標位置插入 (3)contains方法 (4)indexOf方法 (5)get方法 (6)set方法 (7)remove方法 (8)size方法 (9)clear方法 三、最終代碼 代碼如下: 以上的方法就是我們

    2024年02月04日
    瀏覽(27)
  • 【數(shù)據(jù)結(jié)構(gòu)(二)】順序表與ArrayList

    【數(shù)據(jù)結(jié)構(gòu)(二)】順序表與ArrayList

    ?博主主頁: 33的博客? ?文章專欄分類:數(shù)據(jù)結(jié)構(gòu)? ??我的代碼倉庫: 33的代碼倉庫?? ?????? 關(guān)注我?guī)銓W(xué)更多數(shù)據(jù)結(jié)構(gòu)知識 在計算機科學(xué)中,數(shù)據(jù)結(jié)構(gòu)是處理和組織數(shù)據(jù)的方法和技術(shù)。順序表是一種常見的線性表數(shù)據(jù)結(jié)構(gòu),它基于數(shù)組實現(xiàn),提供了快速的隨機訪問能力

    2024年04月12日
    瀏覽(27)
  • Collection與數(shù)據(jù)結(jié)構(gòu) 順序表與ArrayList

    Collection與數(shù)據(jù)結(jié)構(gòu) 順序表與ArrayList

    線性表(linear list)是n個具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實際中廣泛使用的數(shù)據(jù)結(jié)構(gòu),常見的線性表: 順序表、鏈表、棧、隊列… 線性表在邏輯上是線性結(jié)構(gòu),也就說是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的,線性表在物理上存儲時,

    2024年04月13日
    瀏覽(26)
  • 【Java--數(shù)據(jù)結(jié)構(gòu)】模擬實現(xiàn)ArrayList

    【Java--數(shù)據(jù)結(jié)構(gòu)】模擬實現(xiàn)ArrayList

    歡迎關(guān)注個人主頁:逸狼 創(chuàng)造不易,可以點點贊嗎~ 如有錯誤,歡迎指出~ 目錄 LIst 順序表ArrayList 順序表優(yōu)點 IList接口 ArrayList中定義要操作的數(shù)組 在MyArrayList中 重寫接口方法 新增元素 在指定位置插入元素 ?pos不合法異常 判斷和查找元素 獲取和更新元素 刪除元素和清空順序

    2024年04月25日
    瀏覽(28)
  • Java 中數(shù)據(jù)結(jié)構(gòu)ArrayList的用法

    ArrayList 類是一個可以動態(tài)修改的數(shù)組,與普通數(shù)組的區(qū)別就是它是沒有固定大小的限制,我們可以添加或刪除元素。 ArrayList 繼承了 AbstractList ,并實現(xiàn)了 List 接口。 add() 將元素插入到指定位置的 arraylist 中 addAll() 添加集合中的所有元素到 arraylist 中 clear() 刪除 arraylist 中的所

    2024年02月10日
    瀏覽(26)
  • 探索Java集合框架—數(shù)據(jù)結(jié)構(gòu)、ArrayList集合

    探索Java集合框架—數(shù)據(jù)結(jié)構(gòu)、ArrayList集合

    Java集合的使用相信大家都已經(jīng)非常得心應(yīng)手,但是我們怎么做到知其然,更知其所以然這種出神入化的境界呢?我們揭開集合框架底層神秘面紗來一探究竟 目錄 一、背景介紹 二、思路方案 數(shù)據(jù)結(jié)構(gòu)是什么? 數(shù)據(jù)結(jié)構(gòu)可以分為線性和非線性兩種數(shù)據(jù)結(jié)構(gòu) 線性數(shù)據(jù)結(jié)構(gòu): 非

    2024年02月10日
    瀏覽(26)
  • [java數(shù)據(jù)結(jié)構(gòu)] ArrayList和LinkedList介紹與使用

    [java數(shù)據(jù)結(jié)構(gòu)] ArrayList和LinkedList介紹與使用

    (一) 線性表 (二) ArrayList 1. ArrayList的介紹 2. ArrayList的常見方法和使用 3. ArrayList的遍歷 4. ArrayList的模擬實現(xiàn) 5. ArrayList的優(yōu)缺點 (三)?LinkedList 1. LinkedList的介紹 2. LinkedList的常見方法和使用 3. LinkedList的遍歷 4. LinkedList的模擬實現(xiàn) 5. LinkedList的優(yōu)缺點 (四) ArrayList和LinkedList的區(qū)別

    2024年01月21日
    瀏覽(19)
  • java八股文面試[數(shù)據(jù)結(jié)構(gòu)]——ArrayList和LinkedList區(qū)別

    java八股文面試[數(shù)據(jù)結(jié)構(gòu)]——ArrayList和LinkedList區(qū)別

    ? ArrayList和LinkedList的異同 二者的線程都不安全,相對線程安全的Vector,執(zhí)行效率高。此外,ArrayList時實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu),對于隨機訪問get和set,ArrayList覺得優(yōu)于LinkedList比較占優(yōu)勢,因為LinledList要移動指針。對于新增和刪除操作add

    2024年02月11日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】1、學(xué)習(xí)動態(tài)數(shù)組數(shù)據(jù)結(jié)構(gòu)(基本模擬實現(xiàn) Java 的 ArrayList 實現(xiàn)增刪改查)

    【數(shù)據(jù)結(jié)構(gòu)與算法】1、學(xué)習(xí)動態(tài)數(shù)組數(shù)據(jù)結(jié)構(gòu)(基本模擬實現(xiàn) Java 的 ArrayList 實現(xiàn)增刪改查)

    ?? 數(shù)據(jù)結(jié)構(gòu)是 計算機 存儲 、 組織 數(shù)據(jù)的方式 ?? 線性 結(jié)構(gòu) 線性表(數(shù)組、鏈表、棧、隊列、哈希表) ?? 樹形 結(jié)構(gòu) 二叉樹 AVL 樹 紅黑樹 B 樹 堆 Trie 哈夫曼樹 并查集 ?? 圖形 結(jié)構(gòu) 鄰接矩陣 鄰接表 ?? 線性表是具有 n 個 相同類型元素 的有限 序列 (n = 0) a1 是首節(jié)點

    2024年02月10日
    瀏覽(20)
  • java 數(shù)據(jù)結(jié)構(gòu) ArrayList源碼底層 LinkedList 底層源碼 迭代器底層

    java 數(shù)據(jù)結(jié)構(gòu) ArrayList源碼底層 LinkedList 底層源碼 迭代器底層

    對于數(shù)據(jù)結(jié)構(gòu)我這邊只告訴你右邊框框里的 棧的特點:后進先出,先進后出,入棧也成為壓棧,出棧也成為彈棧 棧就像一個彈夾 隊列先進先出后進后出 隊列像排隊 鏈表查詢滿 但是增刪快(相對于數(shù)組而言) 拓展:還有一個雙向鏈表 他在查詢元素的時候更快些,因為他在拿到一個元素

    2024年02月05日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包