天天看點

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