1. 程式人生 > 遊戲攻略 >《喋血復仇》狙擊槍卡牌選擇推薦

《喋血復仇》狙擊槍卡牌選擇推薦

1、Java的容器類,框架結構圖

上圖中:

  • 虛線框中的是介面,實線框是具體的實現類。
  • 虛線空心箭頭為實現介面,實現空心箭頭為繼承類。
  • 實心剪頭為生成,Collection類可以通過Iterator()方法得到Iterator物件。
  • Map實現類可以通過entrySet(),Values()方法得到Set容器等。

2、為什麼要使用容器?

  • 陣列長度固定,應對不確定元素容量、大小的場景時,無法解決問題。
  • 除了序列式的儲存,還應有對映式。
  • 不同的容器有不同的儲存規則。

3、容器的整體結構是怎麼樣的?

  1. 整體分為2個部分:
    • Collection類:儲存單元素的序列
    • Map類:儲存(key:value)的鍵值對序列
  2. Collection類下分為2大類(Queue介面可以被List中的LinkedList實現)
    • List:分為線性儲存和鏈式儲存,即ArrayList和LinkedList
    • Set:有HashSetTreeSetLinkedHashSet
    • 額外的關於Queue介面:PriorityQueue和LinkedList都實現了Queue介面,是其實現類。
  3. 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的介面,該介面包含一個能夠產生Iteratoriterator()方法,並且Iterable介面foreach用來在序列中移動。

因此如果你建立了任何實現Iterator的類,都可以將它用於foreach語句中。

介面卡方法慣用法

當你有一個介面並需要另一個介面時,編寫介面卡就可以解決問題。

這裡,我們希望在預設的前向迭代器的基礎上,新增產生反向迭代器的能力,因此我不能使用覆蓋,而是添加了一個能夠產生Iterable物件的方法,該物件可以用於foreach語句。這樣就可以提供多種foreach方式了。

在使用foreach語句是呼叫它即可。

如:Iterator reversed()方法,它返回一個iterator,而在其具體的實現中,在方法內部,返回來一個內部實現類,其重寫了Iterator()的具體返回方法。 然後返回這個重寫的內部類。

for(String str : ral.reversed())

這種介面卡方法。

不改變原有的iterator()。

而是建立一個新的方法,在該方法內部,重寫iterator()的實現,實現額外的功能適配,再返回。