《喋血復仇》狙擊槍卡牌選擇推薦
1、Java的容器類,框架結構圖
上圖中:
- 虛線框中的是介面,實線框是具體的實現類。
- 虛線空心箭頭為實現介面,實現空心箭頭為繼承類。
- 實心剪頭為生成,Collection類可以通過Iterator()方法得到Iterator物件。
- Map實現類可以通過entrySet(),Values()方法得到Set容器等。
2、為什麼要使用容器?
- 陣列長度固定,應對不確定元素容量、大小的場景時,無法解決問題。
- 除了序列式的儲存,還應有對映式。
- 不同的容器有不同的儲存規則。
3、容器的整體結構是怎麼樣的?
- 整體分為2個部分:
- Collection類:儲存單元素的序列
- Map類:儲存(key:value)的鍵值對序列
- Collection類下分為2大類(Queue介面可以被List中的LinkedList實現)
- List:分為線性儲存和鏈式儲存,即ArrayList和LinkedList
- Set:有HashSet、TreeSet、LinkedHashSet
- 額外的關於Queue介面:PriorityQueue和LinkedList都實現了Queue介面,是其實現類。
- Map類就是其實現類:
- HashMap
- TreeMap
- LinkedHashMap
4、這些具體的實現類有什麼特性、方法?
ArrayList
其底層實現是可以擴容的陣列。
所以該容器對於查詢、讀取、修改操作的效率很快,但是對於增添、刪除的操作較慢。
LinkedList
連結串列。
其查詢、讀、改的操作比較慢,需要從頭遍歷,增添、刪除很快。
其實現了Queue介面,可以有佇列的方法。有入隊、出隊等方法
同時其也可以實現Stack。有出棧、入棧等方法
一些方法有:增刪改查、判斷某序列是否是子列、擷取子列等
PriorityQueue
在Queue的基礎上。不是簡單的自然排序
而是根據自己的優先需求,重寫了Compartor介面的抽象方法。
在入隊、或者出隊時,根據比較排序,按優先順序出隊。
故名:優先順序佇列
HashSet
特性是:整個容器中某一個物件,只能唯一。
利用雜湊函式,加快了查詢速度。
方法具體的有:增加、刪除、判斷是否存在某個物件等
TreeSet
特性同上。
底層實現是:紅黑樹
新增會自動按升序進行排序。
LinkedHashSet
按照新增的順序排列的散列表。
保留了順序的同時,也是使用散列表實現,保證了查詢速度。(好像是維護了一張表,來儲存加入的順序)
HashMap
Map可以用過鍵查詢值、且鍵是唯一的。
且可以巢狀:一個人可以對映到一個集合,這個集合裡存了該人的多個寵物。(可以一對多,不可以多對一)
雜湊函式實現,故而查詢速度很快。
TreeMap
同上。
LinkedHashMap
同LinkedHashSet,只是多了Map的特性。
最後。Map唯一和Collection的交集就是:可以用過entrySet和values方法生成集合的相關類,可以通過Iterator遍歷等。
5、Utilities
圖中還有2個工具類。
-
Arrays
-
Collections
他們有一些功能方法,具體的可以要使用時檢視。
6、Iterator和ListIteartor
ListIterator是Iterator的子類。
List的相關容器可以通過ListIterator()方法得到它。
它有一些只針對List容器的方法,如雙向遍歷等。
7、Foreach與迭代器
foreach除了用於陣列,還可以用於任何的Collection物件。
之所以能用,是因為有一個Iterable的介面,該介面包含一個能夠產生Iterator的iterator()方法,並且Iterable介面被foreach用來在序列中移動。
因此如果你建立了任何實現Iterator的類,都可以將它用於foreach語句中。
介面卡方法慣用法
當你有一個介面並需要另一個介面時,編寫介面卡就可以解決問題。
這裡,我們希望在預設的前向迭代器的基礎上,新增產生反向迭代器的能力,因此我不能使用覆蓋,而是添加了一個能夠產生Iterable物件的方法,該物件可以用於foreach語句。這樣就可以提供多種foreach方式了。
在使用foreach語句是呼叫它即可。
如:Iterator
for(String str : ral.reversed())
這種介面卡方法。
不改變原有的iterator()。
而是建立一個新的方法,在該方法內部,重寫iterator()的實現,實現額外的功能適配,再返回。