Java集合面試總結
★★★★★集合架構:用於儲存資料的容器。
特點:
1:對象封裝資料,對象多了也需要儲存。集合用於儲存物件。
2:對象的個數確定可以使用數組,但是不確定怎麼辦。可以用集合。因為集合是可變長度的。
集合和數組的區別:
1:數組是固定長度的;集合可變長度的。
2:數組可以儲存基礎資料型別 (Elementary Data Type),也可以儲存引用資料類型;集合只能儲存引用資料類型。
3:數組儲存的元素必須是同一個資料類型;集合儲存的對象可以是不同資料類型。
資料結構:就是容器中儲存資料的方式。
對於集合容器,有很多種。因為每一個容器的自身特點不同,其實原理在於每個容器的內部資料結構不同。
集合容器在不斷向上抽取過程中。出現了集合體系。
在使用一個體系時,原則:參閱頂層內容。建立底層對象。
1 Iterator介面 1.1 Iterator
< java.util >-- 迭代器:是一個介面—Iterator介面,其作用:用於取集合中的元素。
在Iterator介面中定義了三個方法:
|
boolean |
hasNext() 如果仍有元素可以迭代,則返回true。 |
|
E |
next() 返回迭代的下一個元素。 |
|
void |
remove() 從迭代器指向的 collection 中移除迭代器返回的最後一個元素(可選操作)。 |
每一個集合都有自己的資料結構(就是容器中儲存資料的方式),都有特定的取出自己內部元素的方式。為了便於操作所有的容器,取出元素。將容器內部的取出方式按照一個統一的規則向外提供,這個規則就是Iterator介面,使得對容器的遍曆操作與其具體的底層實現相隔離,達到解耦的效果。
也就說,只要通過該介面就可以取出Collection集合中的元素,至於每一個具體的容器依據自己的資料結構,如何?的具體取出細節,這個不用關心,這樣就降低了取出元素和具體集合的耦合性。
Iterator it = coll.iterator();//擷取容器中的迭代器對象,至於這個對象是是什麼不重要。這對象肯定符合一個規則Iterator介面。
[java] view plain copy public static voidmain(String[] args) { Collection coll = new ArrayList(); coll.add("abc0"); coll.add("abc1"); coll.add("abc2"); //--------------方式1---------------------- Iterator it = coll.iterator(); while(it.hasNext()){ System.out.println(it.next()); } //---------------方式2用此種---------------------- for(Iterator it =coll.iterator();it.hasNext(); ){ System.out.println(it.next()); } }
使用Iterator迭代器來進行刪除,則不會出現並發修改異常。
因為:在執行remove操作時,同樣先執行checkForComodification(),然後會執行ArrayList的remove()方法,該方法會將modCount值加1,這裡我們將expectedModCount=modCount,使之保持統一。 1.2 ListIterator
上面可以看到,Iterator只提供了刪除元素的方法remove,如果我們想要在遍曆的時候添加元素怎麼辦。
ListIterator介面繼承了Iterator介面,它允許程式員按照任一方向遍曆列表,迭代期間修改列表,並獲得迭代器在列表中的當前位置。
使用ListIterator來對list進行邊遍曆邊添加元素操作:
[java] view plain copy