1. 程式人生 > >(1)List集合 (2)Queue集合 (3)Set集合

(1)List集合 (2)Queue集合 (3)Set集合

異常 泛型 動態數組 表達 操作 線程安全 IT 當前 定義

1.List集合(重中之重)
1.1 基本概念
java.util.List接口是Collection接口的子接口,該接口中元素有先後放入次序並允許重復
該接口的主要實現類:ArrayList類、LinkedList類、Stack類以及Vector類(筆試題)。
其中ArrayList類的底層是采用動態數組實現的,因此訪問元素方便,增刪元素不方便。
其中LinkedList類的底層是采用雙向鏈表實現的,因此增刪元素方便,訪問元素不方便。
其中Stack類的底層是采用動態數組實現的,該類通常用於描述具有後進先出特征的數據結構,叫做棧(last in first out LIFO)。
其中Vector類的底層是采用動態數組實現的,與ArrayList類相比,屬於線程安全的類,因此操作元素的效率比較低,因此推薦使用ArrayList類。

1.2 常用的方法(練熟、記住)
void add(int index, E element) - 用於將元素element插入到當前集合index位置。
boolean addAll(int index, Collection<? extends E> c)
- 用於將集合c中的所有元素插入到當前集合中index位置。
E get(int index) - 根據參數指定的下標獲取對應的元素並返回。
E set(int index, E element) - 用於將下標index位置的元素替換為element。
- 返回被替換的元素值。
E remove(int index) - 用於刪除當前集合中index位置的元素並返回。
List<E> subList(int fromIndex, int toIndex)
- 用於獲取當前集合中從fromIndex(含)開始到toIndex(不含)之間的部分視圖。
- 視圖簡單來說就是獲取元素並返回,但沒有申請獨立內存空間去存儲。

1.3 泛型機制
目前集合中之所以可以放入不同類型的元素,是因為集合將所有放入的元素都看做Object類型處理的,當從集合中獲取元素時得到的也是Object類型,為了表達該元素真實的數據類型就需要強制類型轉換,而該方式可能引發類型轉換異常。
為了避免上述錯誤的發生,從jdk1.5開始提出泛型機制,也就是在集合名稱的右側使用<數據類型>的方式明確要求該集合可以存放的數據內容,若放入其他內容則編譯報錯。
如:
List<Integer> lt1 = new LinkedList<Integer>();

原理(盡量理解):
泛型機制的本質就是參數化類型,也就是在集合的定義中使用<E>作為形式參數負責占位,當創建集合的對象時<>中的數據類型作為實際參數來初始化形式參數E,此時集合內部的所有E就被替換為<>中的數據類型,從而實現了數據類型作為參數的傳遞。
由於實際參數的類型可以有多種選擇,從而使得同一個集合可以支持廣泛的數據類型,因此得名為"泛型機制"。
如:
//int i = 10; //E = Integer;
//int i = 20; //E = String;
public void show(int i){ public interface List<E>{
...; ...;
} }

show(10); List<Integer> lt1 = ...;
show(20); List<String> lt1 = ...;

2.Queue接口(重點)
2.1 基本概念
java.util.Queue接口是Collection接口的子接口,與List接口是平級關系。
該接口主要用於描述具有先進先出特征的數據結構,叫做隊列(first in first out FIFO).
該接口的主要實現類為:LinkedList類,該類在增刪方法有很大的優勢。

2.2 常見的方法
boolean offer(E e) - 用於將參數指定的元素e插入當前隊列的末尾,成功返回true,
否則返回false。
E poll() - 用於獲取並移除當前隊列中的隊首元素,若隊列為空則返回null。
E peek() - 用於查看當前隊列的隊首元素,若隊列為空則返回null。

3.Set集合(重點)
3.1 基本概念
java.util.Set接口是Collection接口的子接口,與List接口平級。
該接口中的元素沒有放入次序,並且不允許重復。
該接口的主要實現類:HashSet類 和 TreeSet類。
其中HashSet類的底層是采用哈希表來實現數據內容的管理。
其中TreeSet類的底層是采用有序二叉樹來實現數據內容的管理。

3.2 常用的方法
該接口的方法參考Collection接口的方法即可;
Iterator<E> iterator() - 用於獲取當前集合中的叠代器,用於叠代/遍歷/訪問所有元素
其中Iterator是java.util包中的接口,常用方法如下:
boolean hasNext() - 用於判斷當前叠代器是否擁有可以叠代/訪問的元素。
E next() - 用於獲取一個元素並指向下一個位置。

(1)List集合 (2)Queue集合 (3)Set集合