做國際網(wǎng)站的流程廣州seo報(bào)價(jià)
文章目錄
- 一、基本介紹
- 二、常見方法
- 三、ArrayList注意事項(xiàng)
- 四、ArrayList底層結(jié)構(gòu)
- 我的理解
- 五、ArrayList擴(kuò)容機(jī)制
- 無參構(gòu)造器
- 有參構(gòu)造器
- 六、LinkedList
- 介紹
- 底層操作機(jī)制
- 七、ArrayList 與 LinkedList
- ArrayList
- LinkedList
tip:以下是正文部分
一、基本介紹
List集合類中元素有序(即添加順序和取出順序一致)、且可重復(fù)
List集合中的每個(gè)元素都有其對應(yīng)的順序索引,即支持索引。
List容器中的元素都對應(yīng)一個(gè)整數(shù)型的序號記載其在容器中的位置,可以根據(jù)序號存取容器中的元素。
二、常見方法
Object set(int index, Object ele):設(shè)置指定index位置的元素為ele相當(dāng)于是替換。
List subList(int fromIndex, int tolndex):返回從fromIndex到tolndex位置的子集合
左閉右開
三、ArrayList注意事項(xiàng)
1、ArrayList 可以加入null,并且多個(gè)
2、ArrayList 是由數(shù)組來實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的
3、ArrayList 基本等同于Vector,除了 ArrayList是線程不安全(執(zhí)行效率高) ,在多線程情況下,不建議使用ArrayList
四、ArrayList底層結(jié)構(gòu)
1、ArrayList中維護(hù)了一個(gè)Object類型的數(shù)組elementData.
transient Obiect[l elementData;
2、當(dāng)創(chuàng)建對象時(shí),如果使用的是無參構(gòu)造器,則初始elementData容量為0(idk7是10)當(dāng)添加元素時(shí):否則直接添加元先判斷是否需要擴(kuò)容,如果需要擴(kuò)容,則調(diào)用grow方法
3、當(dāng)添加元素時(shí):否則直接添加元先判斷是否需要擴(kuò)容,如果需要擴(kuò)容,則調(diào)用grow方法,否則直接添加元素到合適位置
4、如果使用的是無參構(gòu)造器,如果第一次添加,需要擴(kuò)容的話,則擴(kuò)容elementData為10如果需要再次擴(kuò)容的話,則擴(kuò)容elementData為1.5倍。
5、如果使用的是指定容量capacity的構(gòu)造器則初始elementData容量為capacity
6、如果使用的是指定容量capacity的構(gòu)造器如果需要擴(kuò)容,則直接擴(kuò)容elementData為1.5倍。
我的理解
1.在new ArrayList時(shí),先創(chuàng)建了一個(gè)空的elementData數(shù)組,類型為Object
2.在添加元素時(shí)會(huì)先比較當(dāng)前l(fā)ist的大小和elementData數(shù)組大小,判斷是否需要擴(kuò)容
3.如果需要擴(kuò)容則,返回一個(gè)數(shù)組,并將內(nèi)容copy回去。
五、ArrayList擴(kuò)容機(jī)制
無參構(gòu)造器
elementData容量為0,第1次添加,則擴(kuò)容elementData為10,如需要再次擴(kuò)容,則擴(kuò)容elementData為1.5倍。
有參構(gòu)造器
如果使用的是指定大小的構(gòu)造器,則初始elementData容量為指定大小,如果需要擴(kuò)容則直接擴(kuò)容elementData為1.5倍。
六、LinkedList
介紹
1、LinkedList實(shí)現(xiàn)了雙向鏈表和雙端隊(duì)列特點(diǎn)
2、可以添加任意元素(元素可以重復(fù)),包括null
3、線程不安全,沒有實(shí)現(xiàn)同步
底層操作機(jī)制
1、LinkedList底層維護(hù)了一個(gè)雙向鏈表.
2、LinkedList中維護(hù)了兩個(gè)屬性first和last分別指向 首節(jié)點(diǎn)和尾節(jié)點(diǎn)
3、每個(gè)節(jié)點(diǎn)(Node對象),里面又維護(hù)了prev、next、item三個(gè)屬性,其中通過prev指向前一個(gè),通過next指向后一個(gè)節(jié)點(diǎn)。最終實(shí)現(xiàn)雙向鏈表.
4、LinkedList的元素的添加和刪除,不是通過數(shù)組完成的,相對來說效率較高。
@SuppressWarnings({"all"})
public class Main {public static void main(String[] args) {Node node1 = new Node("a");Node node2 = new Node("b");Node node3 = new Node("c");node1.next = node2;node2.next = node3;node3.pre = node2;node2.pre = node1;Node frist = node1;Node end = node3;//node1 node2 node3 成為雙向鏈表}
}
@SuppressWarnings({"all"})
class Node {String value;Node next, pre;public Node(String value) {this.value = value;}
}
七、ArrayList 與 LinkedList
ArrayList
底層結(jié)構(gòu) : 可變數(shù)組
增刪效率較低
改查效率較高
LinkedList
底層結(jié)構(gòu):雙向鏈表
增刪效率較高
改查效率較低