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:根據索引查找效率相對較低。插入元素,删除元素效率比較高。(有實踐為證)。