我們知道,List是Java編程中經常使用的集合之一,但List到底有哪些不為人知的地方,List為什么被使用的這么多?今天千鋒就為大家分析一下關于List的那點事兒。
List本身其實是一個接口,繼承自Collection接口,所以List存儲元素的特點是單元素,區別于Map(雙元素集合),JDK8為List接口提供了10個實現類,供開發人員使用。為什么提供那么多的實現類呢?因為在實際開發場景下需要根據業務的不同選擇不同的實現類來使用,這就要求大家對實現類的特點都要加以掌握,才能再實際的開發中運用自如。有些菜鳥一個ArrayList走天下^!^。大家可以先看看下面我總結的List子類圖:
接下來我會給大家對以上幾個類進行簡要介紹。
從源碼中可以看到,這個類是抽象類無法進行實例化。該類實現了迭代器和列表迭代器,同時也實現了get(int),set(int, E),add(int, E),remove(int)方法,如果子類有更好的處理方式可以覆蓋這些方法。
此抽象類實現由連續訪問數據存儲所需的工作(如鏈表),它實現了對列表的列表迭代器頂部的隨機訪問方法get(int),set(int index,E element),add(int index,E element)和remove(int index)
此類為主要實現類之一,實際開發過程中經常使用。主要完成可調整大小的集合(基于數組實現),每個ArrayList實例都有一個容量。容量是用于存儲列表中的元素的數組大小。請注意此實現線程不安全。
此類是ArryList的子類,是對ArrayList的擴展。表示MBean屬性值的列表(MBean參見jdk官方文檔)
此類是一個線程安全的變體ArrayList,其中所有可變操作(add,set,remove等等)通過對底層數組的最新副本實現。在多線程情況下使用較頻繁
此類基于雙向鏈表實現List接口。實現所有可選列表操作,并允許所有元素(包括null)。請注意,此實現不同步。
RoleList表示角色列表(Role對象)。在創建關系時用作參數,并且嘗試在關系中設置多個角色。
RoleUnresolvedList表示RoleUnresolved對象的列表,表示由于在嘗試訪問(讀取或寫入)角色時遇到問題,不會從關系中檢索到角色。
Stack類代表最先進先出(LIFO)堆棧的對象。 它擴展了類別Vector與五個操作,允許一個向量被視為堆棧。 設置在通常的push和pop操作,以及作為一種方法來peek在堆棧,以測試堆棧是否為empty的方法,以及向search在棧中的項目的方法在頂部項目和發現多遠它是從頂部。
當首次創建堆棧時,它不包含任何項目
此類實現了可擴展的對象數組。 像數組一樣,它包含可以使用整數索引訪問的組件。 但是, Vector的大小可以根據需要增長或縮小,以適應在創建之后添加和刪除項目。因操作速度較慢,故基本不適用,但卻是線程安全,建議使用ArrayList代替Vector。
好了,以上就是千鋒給大家分析的List基本內容,現在你對List的認識是不是更深刻了呢?