1. 程式人生 > >常用集合類及其特性一之List介面及其實現類

常用集合類及其特性一之List介面及其實現類

list介面:

1>元素有序(插入有序),元素可重複( 可重複的更確切概念即e1.equals(e2) )。

2>如果列表本身允許null元素的話,允許多個null值

3>list藉口提供了特殊的迭代器ListIterater,除了允許Iterater介面提供正常的操作外,該迭代器還允許元素插入和替換,以及雙向訪問,還提供了一個方法來獲取從列表中指定位置開始的列表迭代器。( ListIterater(int index)

常見實現類:ArrayList,LinkedList,Vector,stack

1. ArrayList:

(1)ArrayList內部封裝了一個長度可變的陣列物件

。每個 ArrayList 例項都有一個容量,該容量是指用來儲存列表元素的陣列的大小,他總是至少等於列表的大小。隨著向 Arraylist 中不斷新增元素,其容量也自動整長。

(2)執行緒不同步。如果多個執行緒同時訪問一個ArrayList例項,而其中一個執行緒從結構上修改了列表,那麼它必須保持外部同步。同步一般通過1.對自然封裝該列表的物件進行同步操作來完成。2.如果不存在這樣的物件,則應該使用Collections.synchronizedList方法在建立時將該列表“包裝”起來,以防止意外對列表進行不同步的訪問。

List list=Collections.synchronizedList(new ArrayList());

(3)ArrayList 存/取元素效率非常的高(get/set),時間複雜度是O(1),而查詢,插入和刪除元素效率不太高,時間複雜度為O(n)。由於 ArrayLIst 集合的底層是使用一個數組來儲存元素。在增加或刪除指定位置的元素時,會導致建立新的陣列,效率比較低,但這種陣列的結構允許程式通過索引的方式來訪問元素,因此查詢元素很便捷(時間複雜度為O(N))。

2. LinkedList:

(1)LinkedList 集合內部維護了一個雙向迴圈連結串列。連結串列中的每一個元素都使用引用的方式來記住它的前一個元素和後一個元素,從而可以將所有的元素彼此連線起來。

(2)執行緒不同步。如果多個執行緒同時訪問一個連結列表,而其中一個執行緒從結構上修改了列表,那麼它必須保持外部同步。同步一般通過1.對自然封裝該列表的物件進行同步操作來完成。2.如果不存在這樣的物件,則應該使用Collections.synchronizedList方法在建立時將該列表“包裝”起來,以防止意外對列表進行不同步的訪問.

List list=Collections.synchronizedList(new LinkedList());

(3)LinkedList 增刪效率高,查詢效率低下。ArrayList 所有操作都是按照雙重連結列表的需要執行的。在列表中編索引的操作將從開頭或結尾遍歷列表。而當插入一個新元素時,只需要修改元素之間的這種引用關係即可,刪除一個節點也是如此。

3. Vector:

其用法類似 ArrayList ,就不多說重複了。

區別於 ArrayList的是“Vector是執行緒安全的”。然而,Vector真是執行緒安全的嗎? 我們說的Vector執行緒安全是因為Vector的所有方法都有synchronized修飾,然後這並不意味著它就執行緒安全了。當進行復合操作時,如

    if(!vec.contains(element)){
        vec.add(element);
    }

此時程式並不是執行緒安全的,因為判斷element是否在列表裡跟列表新增element元素可能同時進行。解決此問題的辦法可以為此方法同步,即

        if(!vec.contains(element){
            synchronized(this){
                vec.add(element);
            }   
        }

如此看來,Vector並不是真正執行緒安全的,而且由於方法都用了synchronized修飾,反而大大降低了執行效率。還不如用加鎖的ArrayList。

4. stack

stack 類表示後進先出(LIFO)的物件堆疊。它通過五個操作類 Vector 進行了擴充套件,允許將向量視為堆疊。它提供了通常的 push 和 pop 操作,以及取堆疊頂點的 peek 方法、測試堆疊是否為空的 empty 方法、在堆疊中查詢項並確定到堆疊頂距離的 search 方法。

Deque介面及其實現提供了 LIFO 堆疊操作的更完整和更一致的 set,應該優先使用Deque,而非此類。例如:

Deque<Integer> stack=new ArrayDeque<Integer>();

相關推薦

常用集合及其特性List介面及其實現

list介面: 1>元素有序(插入有序),元素可重複( 可重複的更確切概念即e1.equals(e2) )。 2>如果列表本身允許null元素的話,允許多個null值。 3>list藉口提供了特殊的迭代器ListIterater,除了允許Itera

集合(1)—List介面實現ArrayList

List List介面是Collection介面的子介面,從其名稱可以看出,是一個元素有序(並不是按大小排序,具有順序索引,類似於陣列),預設按照元素的新增順序設定元素的索引。 List用法 List包括List介面以及List介面的所有實現類。因為Lis

java中List介面實現 ArrayList,LinkedList,Vector 的區別 list實現原始碼分析

java面試中經常被問到list常用的類以及內部實現機制,平時開發也經常用到list集合類,因此做一個原始碼級別的分析和比較之間的差異。 首先看一下List介面的的繼承關係: list介面繼承Col

java集合源碼分析List

col 實現類 並且 link arraylist oar print 適用於 for   首先分析一下集合與數組的區別:1.java中的數組一般用於存儲基本數據類型,而且是靜態的,即長度固定不變,這就不適用於元素個數未知的情況;2.集合只能用於存儲引用類型,並且長度可變,

java集合源碼分析List(二)

頻繁 null 並且 reel closed tco 默認 java集合 進行 這一節主要介紹List接口的幾個實現類的區別: 1.線程安全 Vector是線程安全的,而ArrayList和LinkedList是非線程安全的。從源碼中我們可知,Vector類中的方法大部分

JAVA常用集合框架用法詳解基礎篇Colletion介面

首先,在學習集合之前我們能夠使用的可以儲存多個元素的容器就是陣列。 下面舉幾個例子主要是引出集合類的: 1、8,4,5,6,7,55,7,8  像這樣的型別相同的可以使用陣列來儲存,本例可以用int[] arr來儲存。 2、”zhnagsan”,true,68 像這樣的可以使

Java開發知識Java中的集合List介面以及子講解.

            Java開發知識之Java中的集合類 一丶什麼是集合類   如果你學習說資料結構,那麼學習集合就很簡單. 因為集合就是儲存資料的結構. 例如 有連結串列結構 (list ) 還有 map結構.等等.  集合類就是儲存資料的集合. 我們可以看一下繼承圖:    Co

Java集合框架學習(List

collect 有序集合 original package images 遍歷 容量 exp 子類 先附一張Java集合框架圖。 從上面的集合框架圖可以看到,Java集合框架主要包括兩種類型的容器,一種是集合(Collection),存儲一個元素集合,另一種是圖(M

C#泛型效能List<T>序列、陣列、ArrayList序列的排序效能差異

綜上所述,在List<T>類序列、ArrayList類序列、陣列三種資料結構中: 對值型別元素進行排序 效能最優的是List<T>類序列;其次是陣列;而ArrayList類序列略微慢於陣列。 對sting型別元素進行排序: 效能最優的是ArrayList類

Java集合系列List介面

List是一個有序的佇列,每一個元素都有它的索引。第一個元素的索引值是0。List的實現類有LinkedList, ArrayList, Vector, Stack。 List抽象資料型別: ADT List Data 線性表的元素集合為{a1,a2,a3,a4....an},資料型別都是DataTyp

List介面及其主要實現

List介面繼承和擴充套件了Collection介面,List介面表示具有順序的集合,其中可以包含重複元素。使用此介面的實現類時,可以對列表中每個元素的插入位置進行精確的控制,使用者可以根據元素的整數索引(在列表中的位置)訪問元素,並搜尋列表中的元素。List介面中宣告的常用

併發QueueBlockingQueue介面及其實現

1、下面先簡單介紹BlockingQueue介面的五個實現:ArrayBlockingQueue:基於陣列的阻塞佇列實現,在ArrayBlockingQueue內部,維護了一個定長的陣列,以便快取佇列中的資料物件,其內部沒實現讀寫分離,也就意味著生產和消費者不能完全並行。長度

Java集合框架(下)List與Set的contains()方法

Java集合框架(上)介紹了List與Set的基本用法:增刪改查,Java集合框架(中)介紹了Map的基本用法:增刪改查。但是還不夠運用於實際應用,下面就開始介紹List與Set中是否包含某元素的用法。 List的contains()使用(ListCont

集合框架的一些概括總結collection介面介面實現

                      -------android培訓、java培訓、期待與您交流! --------                 我發現集合框架就是方法多了點 亂了點  整理一下還是感覺挺簡單的                1.  先聊一聊為

java工具 服務端java實現根據地址從百度API獲取經緯度

服務端java實現根據地址從百度API獲取經緯度 程式碼:   package com.pb.baiduapi; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr

CXF2.7整合spring發布webservice,返回值型是Map和List<Map>

col oca 嚴重 jaxb worker 並且 數據 返回 anr      在昨天研究了發布CXF發布webservice之後想著將以前的項目發布webservice接口,可是怎麽也發布不起來,服務啟動失敗,原來是自己的接口有返回值類型是Map。   研究了一番之

java基礎庫學習(二.3)List介面實現

List子介面的實現類:ArrayList/Vector/LinkedList List集合:元素有序。可重複的集合,List集合預設按元素的新增順序設定元素的索引,通過索引來訪問物件 List集合原始碼? public interface List<E> extends

關於Java中List三個實現區別

1. 前言: List實現Collection介面,它的資料結構是有序可以重複的結合,該結合的體系有索引;它有三個實現類:ArrayList、LinkList、Vector三個實現類。 2. 三個實現類的基本區別: 2.1 ArrayList: 底層資料結構使陣列結構

Scala集合特質繼承體系、定義方法與主要實現詳解

目錄 一. 架構 二. Traversable 三. Iterable 1. Seq 1.1 緩衝器 2. Set 2.1 SortedSet 2.2 Bitset 3. Map 3.1 ListMap 四. 不可變Seq實體類 1. Lis

Set,List, Map各自實現的比較

介面 實現類 實現方式 特點 Set HashSet 連結串列的陣列(雜湊表) 1、HashSet類按照雜湊演算法來存取集合中的物件,存取速度比較快。 2、存入Hash