Yige

Yige

Build

Java集合彙總

Java 集合常見知識點彙總#

  1. ArrayList 和 Vector 的區別
  2. List,Set,Map 三者的區別
  3. Set 裡的元素是不能重複的,用什麼方法來區分重複與否
  4. ArrayList,LinkedList 區別
  5. Collection 和 Collections 的區別
  6. Enumeration 和 Iterator 接口的區別
  7. ListIterator 有什麼特點
  8. Java 集合的 fail-fast 快速失敗機制
  9. comparable 和 Comparator 的區別

一、ArrayList 和 Vector 的區別#

  • ArrayList 是非同步的, Vector 是同步的
  • 擴容大小不同:Vector 增長原來的一倍,ArrayList 增長原來的 0.5 倍

二、List,Set,Map 三者的區別#

  • List:List 接口存儲一組不唯一(可以有多個元素引用相同的對象),有序的對象
  • Set: 不允許重複的集合。不會有多個元素引用相同的對象。
  • Map: 使用鍵值對存儲。Map 會維護與 Key 關聯的值。兩個 Key 可以引用相同的對象,但 Key 不能重複,典型的 Key 是 String 類型,但也可以是任何對象

三、Set 裡的元素是不能重複的,用什麼方法來區分重複與否#

判斷 key 是否存在,== 和 equals () 方法都有使用。如果添加的元素相同時,是沒有插入的,而是直接修改了 value 值

== 與 equals 的區別#

  • == 是判斷兩個變量或實例是不是指向同一個內存空間,equals 是判斷兩個變量或實例所指向的內存空間的值是不是相同
  • == 是指對內存地址進行比較,equals () 是對字符串的內容進行比較
  • == 指引用是否相同,equals () 指的是值是否相同

HashSet 是如何保證數據不可重複的?#

當你把對象加入 HashSet 時,HashSet 會先計算對象的 hashcode 值來判斷,如果發現有相同 hashcode 值的對象,這時會調用 equals()方法來檢查 hashcode 相等的對象是否真的相同

四、ArrayList,LinkedList 區別#

  • Arraylist 底層使用的是 Object 陣列; LinkedList 底層使用的是雙向鏈表數據結構(JDK1.6 之前為循環鏈表,JDK1.7 取消了循環)
  • LinkedList 不支持高效的隨機元素訪問,而 ArrayList 支持,快速隨機訪問就是通過元素的序號快速獲取元素對象 (對應於 get (int index) 方法)
  • 內存空間佔用: ArrayList 的空間浪費主要體現在在 list 列表的結尾會預留一定的容量空間,而 LinkedList 的空間花費則體現在它的每一個元素都需要消耗比 ArrayList 更多的空間(因為要存放直接後繼和直接前驅以及數據)

五、Collection 和 Collections 的區別#

  • Collection 是集合的上級接口,繼承它的有 Set 和 List 接口
  • Collections 是集合的工具類,提供了一系列的靜態方法對集合的搜索、查找、同步等操作

六、Enumeration 和 Iterator 接口的區別#

Iterator 替代了 Enumeration,Enumeration 是一個舊的迭代器了

  • Iterator 有 fail-fast 機制,比 Enumeration 更安全
  • Iterator 能夠刪除元素,Enumeration 並不能刪除元素

七、ListIterator 有什麼特點#

  • ListIterator 繼承了 Iterator 接口,它用於遍歷 List 集合的元素。
  • ListIterator 可以實現雙向遍歷,添加元素,設置元素

八、Java 集合的 fail-fast 快速失敗機制#

fail-fast 機制是 java 容器(Collection 和 Map 都存在 fail-fast 機制)中的一種錯誤機制。在遍歷一個容器對象時,當容器結構被修改,很有可能會拋出ConcurrentModificationException,產生 fail-fast

什麼情況會出現 fail-fast#

  • 單線程環境:遍歷一個集合過程中,集合結構被修改。注意,listIterator.remove () 方法修改集合結構不會拋出這個異常。
  • 多線程環境:當一個線程遍歷集合過程中,而另一個線程對集合結構進行了修改

實現原理#

集合內部維護了一個 modCount 變量,當遍歷集合節點的時候會判斷modCountexpectedModCount 是否相等,如果不相等就表示已經有線程修改了集合結構

九、comparable 和 Comparator 的區別#

  • comparable 接口實際上是出自 java.lang 包,它有一個 compareTo (Object obj) 方法用來排序
  • comparator 接口實際上是出自 java.util 包,它有一個 compare (Object obj1, Object obj2) 方法用來排序

參考鏈接#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。