【修真院JAVA小課堂】MAP、SET、LIST、QUEUE、STACK的特點與用法

大家好,我是我是深圳分院第十期java學員,一枚正直純潔善良的Java程序員。今天給大家分享一下,修真院官網java任務一的擴展

1.背景介紹

Java容器類用於保存對象,集合主要分爲兩類:Collection 和 Map,

1) Collection

一組"對立"的元素,通常這些元素都服從某種規則

  1.1) List必須保持元素特定的順序

  1.2) Set不能有重複元素

  1.3) Queue保持一個隊列(先進先出)的順序

2) Map

一組成對的"鍵值對"對象

Collection

什麼是集合?

集合,或者叫容器,是一個包含多個元素的對象;

集合可以對數據進行存儲,檢索,操作;

2.知識剖析

List 接口

List 接口

一個 List 是一個元素有序的、可以重複、可以爲 null 的集合(有時候我們也叫它“序列”)。

Java 集合框架中最常使用的幾種 List 實現類是 ArrayList,LinkedList 和 Vector。

在各種 List 中,最好的做法是以 ArrayList 作爲默認選擇。 當插入、刪除頻繁時,使用 LinkedList,

Vector 總是比 ArrayList 慢,所以要儘量避免使用它。

爲什麼 List 中的元素 “有序”、“可以重複”呢?

首先,List 的數據結構就是一個序列,

存儲內容時直接在內存中開闢一塊連續的空間,然後將空間地址與索引對應。

ArrayList:

不支持該協議取消重新上傳

ArrayList,本質是一個數組:

LinkedList, 雙向鏈表

.Set是一個不包含重複元素的 collection。更確切地講,

set 不包含滿足 e1.equals(e2) 的元素對 e1 和 e2,並且最多包含一個 null 元素。

正如其名稱所暗示的,此接口模仿了數學上的 set 抽象。

Stack棧是一種線性數據結構,遵從 LIFO(後進先出)的操作順序,

不支持該協議取消重新上傳

Queue隊列是一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,

而在表的後端(rear)進行插入操作。進行插入操作的端稱爲隊尾,進行刪除操作的端稱爲隊頭

在隊列這種數據結構中,最先插入的元素將是最先被刪除的元素;

反之最後插入的元素將是最後被刪除的元素,因此隊列又稱爲“先進先出”(FIFO—first in first out)的線性表

Map 中,任意一個 key 都有唯一確定的 value 與其對應,這個 key-value 的映射就是 map

Map 中元素的順序取決於迭代器迭代時的順序,有的實現類保證了元素輸入輸出時的順序,比如說 TreeMap;有的實現類則是無序的,比如 HashMap。

3.常見問題

LinkedList 與  ArrayList

ArrayList 是以數組實現的,遍歷時很快,但是插入、刪除時都需要移動後面的元素,效率略差些。

而LinkedList 是以雙向鏈表實現的,插入、刪除時只需要改變前後兩個節點指針指向即可,

不支持該協議取消重新上傳

4.編碼實戰

5.擴展思考

Iterator 迭代器

之前的遍歷,代碼和集合本身是緊密耦合的,無法將訪問邏輯從集合類和客戶端代碼中分離出來。

同時每一種集合對應一種遍歷方法,客戶端代碼無法複用

Iterator模式總是用同一種邏輯來遍歷集合。所有的內部狀態都由Iterator來維護。

客戶端從不直接和集合類打交道,它總是控制Iterator,向它發送"向前","向後","取當前元素"的命令,就可以間接遍歷整個集合。

public interface Iterator { 

  boolean hasNext(); 

  Object next(); 

  void remove(); 

}

Object next():返回迭代器剛越過的元素的引用,返回值是Object,需要強制轉換成自己需要的類型

boolean hasNext():判斷容器內是否還有可供訪問的元素

  void remove():刪除迭代器剛越過的元素

6.參考文獻

百度,博客

7.更多討論

提問:

第一個問題:在查找時arraylist,linkedlist那個效率更高?

答:查找時arraylist更快,因爲內存是連在一起的,查找起來不需要去尋找存放數據的內存。這樣速度最快

第二個問題:STACK的應用場景

在內存設置中就使用棧來存放變量,可以方便我們取出最近設置的變量

第三個問題:QUEUE的應用場景

計算機及其網絡自身內部的各種計算資源,無論是多進程共享的 CPU 時間,還是多用戶共享的打印機,也都需要藉助隊列結構實現合理和優化的分配。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章