1. 程式人生 > >JAVA-集合學習整理

JAVA-集合學習整理

collection(收藏)
作用:用來處理程式中各種型別的物件集合的。

Iterator 迭代器
在集合框架中,我們可以通過Iterator 容器的迭代器對容器中的元素進行遍歷。
所有可以使用Iterator進行迭代的集合,都必須實現Iterable介面。也就是說,實現了Iterable介面的容器具備了可以被迭代的功能。
該介面只有一個方法。iterator()得到當前容器的迭代器的功能。

我們一般把iterator稱為集合的標準的迭代方式。
三個方法:
hasNext()
next()
remove()

while (iterator2.hasNext()) {
String value = iterator2.next();
System.out.print(value+”\t”);
}
Collection(收藏、收藏品)有兩個子介面
可以儲存 重複的、無序的 物件的

List Set

1:List
list.add(“”);//新增
list.remove(“”);//刪除
list.clear();//清除
在父介面的功能的基礎上,增加了有序(儲存的一個位置的 序號 類似陣列的下標的意思 )的功能。

List 有兩個實現類
1:ArrayList 底層使用陣列實現。
優點:根據索引查詢元素效率比較高。遍歷元素的效率比較高
缺點:因為底層使用陣列實現,所以說,刪除元素,插入元素,根據內容查詢元素效率都偏低。

ArrayList是一個非執行緒安全的容器類。
預設的構造方法初始容量為10.

2:LinkedList  底層是用連結串列的資料結構實現。

優點:插入和刪除的效率比較高
缺點:遍歷的效率就相對比較低了。根據索引查詢元素效率相對較低。

LinkedList的執行效率遠遠高於ArrayList。
容器的選擇取決於你的業務的需求,如果只是一些遍歷的操作,那麼使用ArrayList即可,如果有大量的插入刪除的操作,建議使用LinkedList。

2:Set
Set特點:無序,唯一
兩個實現的子類:
1:HashSet 底層使用雜湊表實現。元素所對應的類 需要重寫Object的hashCode 方法。equals 方法。
雜湊碼用來查詢 順序表的位置。equals 用來判斷和已經新增的元素是否相等。如果相等就不新增。實現了元素的唯一性。
HashSet 效率非常的高。
HashSet在遍歷的時候新增和遍歷輸出的順序不一致。

LinkedHashSet 是HashSet的子類。在原有的基礎上增加了一個連結串列用來維護新增元素的順序。在遍歷的時候新增和遍歷輸出的順序一致。

Set 迭代元素的方式?
2種,forEach iterator

TreeSet :底層使用二叉樹實現。特點:元素有序(升序)的唯一。
排序的方式有兩種:
一種是讓元素所對應的類實現Comparable 介面。實現compareTo方法。內部比較器
使用外部比較器 自定義一個外部比較器實現Comparator介面。例項化TreeSet 物件時,指定外部比較器。

map

HashMap 特點:
key 是無序 ,唯一 value :是無序 ,不唯一
所有的key型別,都必須重寫 Object 的hashCode()方法 和equals()方法。

讀取 刪除,插入等操作效率都比較高。

LinkedHashMap:是HashMap的子類。
在原有的基礎上,增加了一個連結串列維護新增的順序。效率相對於HashMap 有了一定程度的降低。

遍歷的順序和新增的順序是一致的。

Iterator是迭代器類,而Iterable是介面。
好多類都實現了Iterable介面,這樣物件就可以呼叫iterator()方法。
一般都是結合著用,比如
HashMap類就實現了Iterable介面,而要訪問或打印出Map中所有內容時,就可以這樣: HashMap hashMap;
Iterator iter = hashMap.iterator();
while(iter.hashNext()) {
String s = iter.next();
}

1:陣列和容器的區別
陣列:長度固定,只能通過自己實現方法去運算元組。只能通過陣列下標訪問元素。
容器:可以擴容,封裝了大量操作元素的方法。修改的,新增的,插入的刪除的,等等。可以通過內容操作容器中的物件。
容器可以幫助我們快速開發,減少開發的時間。

2:Vector 向量 和 ArrayList
相同點:底層都是使用陣列實現。
不同點:
1:Vector JDK1.0出現 , ArrayList JDK 1.2出現。
2:Vector 是執行緒安全的。ArrayList 是非執行緒安全的。
ArrayList 是重效率,輕安全,是Vector 的替代類。並沒有完全替代。
Vector 隨著JDK版本的更新,已經做了大量的修改,增加了很多的方法。
現在使用ArrayList 相對比較多。Vector 慢慢的使用的越來越少。

3:Collection 和 Collections的區別
相同點:長得比較相似。
不同點:
Collection 是一個介面,定義了一種型別的容器 ,特點:無序、不唯一。
Collections 是一個類,封裝了大量關於操作容器的方法。內部都是靜態方法,類似於Arrays 類。工具類。幫助我們更好的操作容器物件。

4:HashTable 和 HashMap 相同點和不同點
相同點:都是對鍵值對物件進行操作的。使用put get 等方法操作元素。
不同點:HashTable 是jdk1.0出現的。是一個執行緒安全的容器。 HashMap 是jdk1.2出現。是一個非執行緒安全的。
HashTable 是一個重安全輕效率的一個容器。。HashMap 重效率輕安全的容器。HashMap的效率高於HashTable。
可以理解為HashMap 是HashTable的替代類。
HashTable 的直接的父類是 Dictionary(字典) 這個類。

HashMap的key 和value 都可以null
HashTable的key 和value 都不能是null

5:ArrayList 和 LinkedList
相同點:都是有順序的,元素有編號。
不同點:
1:底層實現不同,ArrayList 底層使用陣列實現。LinkedList 使用連結串列實現。
2:ArrayList根據索引查詢,或者遍歷效率比較高。插入元素(需要移動大量的元素),刪除元素(需要移動大量的元素)效率比較低。
LinkedList:根據索引查詢效率相對較低。插入元素,刪除元素效率比較高。(有實踐為證)。