Java容器介紹

一、分類

容器主要包含 Collection 和 Map,Collection 存儲的是對象集合(單個對象),而 Map 存儲的是鍵值對(兩個對象)的映射表。

Collection

在這裏插入圖片描述

  • Set:無順序,元素不可重複。
  • List:有順序,元素可重複。
  • Queue:先進先出(FIFO)。

1、Set

  • TreeSet基於紅黑樹實現,支持有序性操作,例如根據一個範圍查找元素的操作。但查找效率不如 HashSet ,HashSet查找的時間複雜度爲O(1),TreeSet的則是O(logN)。
  • HashSet基於哈希表實現,支持快速查詢,但不支持有序性操作,並且失去元素插入順序信息。
  • LinkedHashSet基於雙向鏈表和哈希表實現,具有HashSet的查找效率,內部使用雙向列表維護元素的插入順序。

2、List

  • ArrayList基於動態數組實現,支持隨機查詢。線程不安全,訪問速度快。
  • Vector:和ArrayList類似,支持隨機查詢,但線程安全,訪問速度慢。
  • LinkedList基於雙向鏈表實現,只能順序訪問,但可以快速的在鏈表中間插入或刪除元素。可以使用LinkedList作爲棧,隊列,雙向隊列。

3、Queue

  • LinkedList基於雙向鏈表實現,可以用它來實現雙向隊列。
  • PriorityQueue基於堆結構實現,可以用它來實現優先隊列。

Map

在這裏插入圖片描述

  • TreeMap基於紅黑樹實現
  • HashMap基於哈希表實現
  • Hashtable:和 HashMap 類似,但它是線程安全的,這意味着同一時刻多個線程同時寫入Hashtable 不會導致數據不一致。這是遺留類,不應該使用它,使用ConcurrentHashMap支持線程安全,且ConcurrentHashMap效率更高,因爲它使用的是分段鎖。
  • LinkedHashMap基於雙向鏈表實現,使用雙向鏈表維護元素的順序,順序爲插入順序或者最近最少使用(LRU)順序。

二、容器中的設計模式

迭代器模式

在這裏插入圖片描述

  • 迭代器模式:讓用戶通過特定的接口訪問容器的數據,不需要了解容器內部的數據結構。
  • Iterator : 迭代器對象
public interface Iterator<E> {
	boolean hasNext();//判斷是否有下一個元素
	E next();//將遊標指向下一個元素
}
  • Iterable :容器實現Iterable接口,獲取迭代器對象
public interface Iterable<T> {
	Iterator<T> iterator();//獲取迭代器對象
}

適配器模式

  • 適配器模式:將一個類的接口轉換成客戶希望的另外一個接口,讓原來不兼容的兩個接口協同工作。
  • java.util.Arrays#asList() 可以把數組類型轉換爲 List 類型
public static <T> List<T> asList(T... a) {
	return new ArrayList<>(a);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章