目錄
       一、Collection介面" >       一、Collection介面
       二、List介面" >       二、List介面
  與ArrayList相似,但是Vector是同步的。所以說Vector是線程安全的動態數組。它的操作與ArrayList幾乎一樣。 " >  與ArrayList相似,但是Vector是同步的。所以說Vector是線程安全的動態數組。它的操作與ArrayList幾乎一樣。
       Stack繼承自Vector,實現一個後進先出堆疊的堆疊的堆疊。 Stack提供5個額外的方法使得Vector得以被當作堆疊使用。基本的push和pop 方法,還有peek方法得到棧頂的元素,empty方法測試堆疊是否為空,search方法檢測一個元素在堆疊中的位置。 Stack剛建立後是空棧。 " >       Stack繼承自Vector,實現一個後進先出堆疊的堆疊的堆疊。 Stack提供5個額外的方法使得Vector得以被當作堆疊使用。基本的push和pop 方法,還有peek方法得到棧頂的元素,empty方法測試堆疊是否為空,search方法檢測一個元素在堆疊中的位置。 Stack剛建立後是空棧。
      Set是一種不含重複元素的不包含重複元素的一種不包含重複元素的一種不包含重複元素。它維持它自己的內部排序,所以隨機存取沒有任何意義。與List一樣,它同樣運行null的存在但只有一個。由於Set介面的特殊性,所有傳入Set集合中的元素都必須不同,同時要注意任何可變對象,如果在對集合中元素進行操作時,導致e1.equals(e2)==true,則必定會產生某些問題。實作了Set介面的集合有:EnumSet、HashSet、TreeSet。 " >      Set是一種不含重複元素的不包含重複元素的一種不包含重複元素的一種不包含重複元素。它維持它自己的內部排序,所以隨機存取沒有任何意義。與List一樣,它同樣運行null的存在但只有一個。由於Set介面的特殊性,所有傳入Set集合中的元素都必須不同,同時要注意任何可變對象,如果在對集合中元素進行操作時,導致e1.equals(e2)==true,則必定會產生某些問題。實作了Set介面的集合有:EnumSet、HashSet、TreeSet。
      4.1、HashMap" >      4.1、HashMap
      4.2、TreeMap" >      4.2、TreeMap
       六、異同點" >       六、異同點
      6.2、Aarraylist和Linkedlist" >      6.2、Aarraylist和Linkedlist
      6.3、HashMap與TreeMap" >      6.3、HashMap與TreeMap
      " >       七、對集合的選擇     
      7.2、對Set的選擇" >      7.2、對Set的選擇
首頁 Java java教程 java提高篇(二十)-----集合大家族

java提高篇(二十)-----集合大家族

Feb 10, 2017 pm 02:16 PM

       在編寫java程式中,我們最常用的除了八種基本資料類型,String物件外還有一個集合類,在我們的程式中到處充斥著集合類別的身影! java中集合大家族的成員實在是太豐富了,有常用的ArrayList、HashMap、HashSet,也有不常用的Stack、Queue,有線程安全的Vector、HashTable,也有線程不安全的LinkedList、TreeMap等等!



       上面的圖片展示了整個集合大的成員以及他們之間的關係。以下就上面的各個介面、基類做一些簡單的介紹(主要介紹各個集合的特點。區別),更加詳細的介紹會在不久的將來一一講解。

       一、Collection介面

     Set。 Collection所代表的是一種規則,它所包含的元素都必須遵循一條或多條規則。如有些允許重複而有些則不能重複、有些必須要按照順序插入而有些則是散列,有些支援排序但是有些則不支援。

       在Java中所有實現了Collection介面的類別都必須提供兩套標準的建構函數,一個是無參,用於創建一個空的Collection,一個是帶有Collection參數參數的有參構造函數參數,用於建立一個新的Collection,這個新的Collection與傳入進來的Collection具備相同的元素。

       二、List介面

      List所代表的是有序的Collection,也就是它用某種特定的插入順序來維護元素順序。使用者可以對清單中每個元素的插入位置進行精確地控制,同時可以根據元素的整數索引(在清單中的位置)存取元素,並蒐索清單中的元素。實作List介面的集合主要有:ArrayList、LinkedList、Vector、Stack。

      2.1、ArrayList

       ArList是一個動態數組,也是我們最常使用的集合。它允許任何符合規則的元素插入甚至包括null。每一個ArrayList都有一個初始容量(10),該容量代表了陣列的大小。隨著容器中的元素不斷增加,容器的大小也會隨著增加而增加。在每次在容器中增加元素的同時都會進行容量檢查,當快溢出時,就會進行擴容操作。所以如果我們明確所插入元素的多少,最好指定一個初始容量值,避免過多的進行擴容操作而浪費時間、效率

       size、isEmpty、get、set、iterator 和 listIterator 作業都以固定時間運作。 add 操作以分攤的固定時間運行,也就是說,添加 n 個元素需要 O(n) 時間(由於要考慮到擴容,所以這不只是添加元素會帶來分攤固定時間開銷那麼簡單)。

ArrayList擅長於隨機存取。同時ArrayList是非同步的。

      2.2、LinkedList

       對則為一個相同網路介面所以它除了有ArrayList的基本操作方法外還額外提供了get,remove,insert方法在LinkedList的首部或尾部。

       由於實現的方式不同,LinkedList不能隨機訪問,它所有的操作都是要按照雙重鍊錶的需要執行。在清單中索引的操作將從開頭或結尾遍歷清單(從靠近指定索引的一端)。這樣做的好處就是可以透過較低的代價在List中進行插入和刪除操作。

       與ArrayList一樣,LinkedList也是非同步的。如果多個執行緒同時存取一個List,則必須自行實作存取同步。一個解決方法是在建立List時建構一個同步的List:
List list = Collections.synchronizedList(new LinkedList(...));

  與ArrayList相似,但是Vector是同步的。所以說Vector是線程安全的動態數組。它的操作與ArrayList幾乎一樣。

      2.4、Stack

       Stack繼承自Vector,實現一個後進先出堆疊的堆疊的堆疊。 Stack提供5個額外的方法使得Vector得以被當作堆疊使用。基本的push和pop 方法,還有peek方法得到棧頂的元素,empty方法測試堆疊是否為空,search方法檢測一個元素在堆疊中的位置。 Stack剛建立後是空棧。

       三、Set介面

      Set是一種不含重複元素的不包含重複元素的一種不包含重複元素的一種不包含重複元素。它維持它自己的內部排序,所以隨機存取沒有任何意義。與List一樣,它同樣運行null的存在但只有一個。由於Set介面的特殊性,所有傳入Set集合中的元素都必須不同,同時要注意任何可變對象,如果在對集合中元素進行操作時,導致e1.equals(e2)==true,則必定會產生某些問題。實作了Set介面的集合有:EnumSet、HashSet、TreeSet。

      3.1、EnumSet

             

      枚舉的專用。所有的元素都是枚舉型別。

      3.2、HashSet

       以達到其速度最快的集合,因為其速度是基礎的集合,因為其速度來實現其速度最快的集合。它內部元素的順序是由雜湊碼來決定的,所以它不保證set 的迭代順序;特別是它不保證該順序恆久不變。

      

3.3、TreeSet

      

基於TreeMap,生成一個內部化的順序來實現排序。它是使用元素的自然順序對元素進行排序,或根據建立Set 時提供的Comparator 進行排序,取決於使用的​​建構方法。

       四、Map介面

      

Map與List、Setkey同時它也沒有繼承Collection。在Map中它保證了key與value之間的一一對應關係。也就是說一個key對應一個value,所以它不能存在相同的key值,當然value值可以相同。實作map的有:HashMap、TreeMap、HashTable、Properties、EnumMap。

      4.1、HashMap

       以哈希表資料結構實現,且查找物件時透過雜湊函數計算其位置,它是數字化時,它是定義了一個物件時數Entry[] table),元素會透過雜湊轉換函數將元素的雜湊位址轉換成數組中存放的索引,如果有衝突,則使用雜湊鍊錶的形式將所有相同雜湊位址的元素串起來,可能透過查看HashMap.Entry的源碼它是一個單鍊錶結構。

      4.2、TreeMap

     ¢       

4.3、 HashTable

      

也是以哈希表資料結構實現的,解決衝突時與HashMap也一樣也是採用了散列鍊錶的形式,不過性能比HashMap

       隊列,它主要分為兩大類,一類是阻塞式隊列,隊列滿了以後再插入元素則會拋出異常,主要包括ArrayBlockQueue、PriorityBlockingQueue、LinkedBlockingQueue。另一種佇列則是雙端佇列,支援在頭、尾兩端插入和移除元素,主要包括:ArrayDeque、LinkedBlockingDeque、LinkedList。

       六、異同點

      6.1、Vector和ArrayList

       1,vector是線程同步的,所以它也是線程安全的,而arraylist是線程異步的,是不安全的。如果不考慮到線程的安全因素,一般用arraylist效率比較高。

       2,若集合中的元素的數目大於目前集合數組的長度時,vector增長率為目前數組長度的100%,而arraylist增長率為當前數組長度的50%.如過在集合中使用數據數據量比較大的數據,用vector有一定的優勢。        3,如果找到指定位置的數據,vector和arraylist使用的時間是相同的,都是0(1),這個時候使用vector和arraylist都可以。而如果移動一個指定位置的資料花費的時間為0(n-i)n為總長度,這個時候就應該考慮到使用linklist,因為它移動一個指定位置的資料所花費的時間為0(1),而查詢一個指定位置的資料時所花費的時間為0(i)。

       ArrayList 和Vector是採用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,都允許直接序號索引元素,但是插入數據要設計到數組元素移動等內存數組元素,所以索引資料快插入資料慢,Vector由於使用了synchronized方法(線程安全)所以性能上比ArrayList要差,LinkedList使用雙向鍊錶實現存儲,按序號索引資料需要進行向前或向後遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入數度較快!

      6.2、Aarraylist和Linkedlist

    
       2.隨機存取get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。
       3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。 這一點要看實際情況的。若只對單一資料插入或刪除,ArrayList的速度反而優於LinkedList。但若是批量隨機的插入刪除數據,LinkedList的速度大大優於ArrayList. 因為ArrayList每插入一條數據,要移動插入點及之後的所有數據。

      6.3、HashMap與TreeMap

    序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。 HashMap中元素的排列順序是不固定的)。

       2、 HashMap透過hashcode對其內容進行快速查找,而TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個有序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。集合架構」提供兩種常規的Map實作:HashMap和TreeMap (TreeMap實作SortedMap介面)。

       3、在Map 中插入、刪除和定位元素,HashMap 是最好的選擇。但如果您要插入最好的選擇。以自然順序或自訂順序遍歷鍵,那麼TreeMap會更好。 。一個實現。 2.同步性:Hashtable是執行緒安全的,也就是說是同步的,而HashMap是線程式不安全的,不是同步的。一張表格的條目的key或value 。

       七、對集合的選擇     

1、隨機查詢與迭代遍歷操作,陣列比所有的容器都要快。元素位移。當效能因為List的頻繁插入和刪除而降低時,再考慮LinkedList。

      7.2、對Set的選擇

       1、HashSet由於使用Hash       1、HashSet由於使用Hash    1

       3、雖然TreeSet沒有HashSet性能好,但是由於它可以維持元素的排序,所以它還是存在用武之地的。

      7.3、對Map的選擇

       1、

      

1、Hash,支援快速詢問。雖然HashTable速度的速度也不慢,但在HashMap面前還是稍微慢了些,所以HashMap在查詢方面可以取代HashTable。

      

2、由於TreeMap需要維持內部元素的順序,所以它通常比HashMap和HashTable慢。


.

🎜🎜🎜

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

在本文中,我們保留了最常被問到的 Java Spring 面試問題及其詳細答案。這樣你就可以順利通過面試。

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP與Python:核心功能 PHP與Python:核心功能 Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

See all articles