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