關(guān)于collection接口
Collection 表示一組對象赊堪,這些對象也稱為 collection 的元素面殖,元素是獨立的。
我們一般用到的collection往往是他的子接口的實現(xiàn)類哭廉。
常用的子接口:
- List<E>
- Set<E>
- Queue<E>
Collection是對Iterable接口的拓展脊僚。故所有的Collection對象都可以使用foreach方式,對元素進行方便的遍歷遵绰。
由于Iterable接口中定義了的唯一方法為:返回一個Iterator對象辽幌,故所有的Collection都可以用 對象名.iterator()的方式獲取該collection的迭代器iterator對象。
例:
Collection coll = new ArrayList(); //LinkedList(); ArrayList();實現(xiàn)類
coll.add("Tody");
coll.add("is");
coll.add("Sunday.");
關(guān)于list接口
List<E>接口繼承了Collection接口椿访,并且增加了有序的特點乌企。同時它允許重復(fù)的元素。
此接口的用戶可以對列表中每個元素的插入位置進行精確地控制成玫。用戶可以根據(jù)元素的整數(shù)索引(在列表中的位置)訪問元素加酵,并搜索列表中的元素端辱。
常用的子類:
ArrayList實現(xiàn)了可變大小的數(shù)組。它允許所有元素虽画,包括null舞蔽。
ArrayList沒有同步。size码撰,isEmpty渗柿,get,set方法運行時間為常數(shù)脖岛。但是add方法開銷為分攤的常數(shù)朵栖,添加n個元素需要O(n)的時間。其他的方法運行時間為線性柴梆。每個ArrayList實例都有一個容量(Capacity)陨溅,即用于存儲元素的數(shù)組的大小。這個容量可隨著不斷添加新元素而自動增加绍在,但是增長算法并沒有定義门扇。當需要插入大量元素時,在插入前可以調(diào)用ensureCapacity方法來增加ArrayList的容量以提高插入效率偿渡。
【非同步】
LinkedList實現(xiàn)了List接口臼寄,允許null元素。此外LinkedList提供額外的get溜宽,remove吉拳,insert方法在 LinkedList的首部或尾部。這些操作使LinkedList可被用作堆棧(stack)适揉,隊列(queue)或雙向隊列(deque)留攒。
【非同步】
Vector非常類似ArrayList,但是Vector是【同步】的嫉嘀。由Vector創(chuàng)建的Iterator炼邀,雖然和ArrayList創(chuàng)建的 Iterator是同一接口,但是吃沪,因為Vector是同步的汤善,當一個 Iterator被創(chuàng)建而且正在被使用什猖,另一個線程改變了Vector的狀態(tài)(例如票彪,添加或刪除了一些元素),這時調(diào)用Iterator的方法時將拋出 ConcurrentModificationException不狮,因此必須捕獲該異常降铸。
Stack繼承自Vector,實現(xiàn)一個后進先出的堆棧摇零。Stack提供5個額外的方法使得Vector得以被當作堆棧使用推掸。基本的push和pop方法,還有 peek方法得到棧頂?shù)脑亓鲁琫mpty方法測試堆棧是否為空登渣,search方法檢測一個元素在堆棧中的位置。Stack剛創(chuàng)建后是空棧毡泻。
List l = new ArrayList();
Iterator iter = l.iterator();
關(guān)于Set接口
一個不包含重復(fù)元素的 collection胜茧。更確切地講,set 不包含滿足 e1.equals(e2) 的元素對 e1 和 e2仇味,并且最多包含一個 null 元素呻顽。
可以進行排序。
常用子類:
- 散列存放 HashSet
HashSet它不允許出現(xiàn)重復(fù)元素丹墨;不保證集合中元素的順序;允許包含值為null的元素廊遍,但最多只能有一個null元素。
- 有序存放 TreeSet
TreeSet描述的是Set的一種變體——可以實現(xiàn)排序等功能的集合贩挣,它在講對象元素添加到集合中時會自動按照某種比較規(guī)則將其插入到有序的對象序列中喉前。String就是升序。
Set<String> s =null;
s= new TreeSet<String>();
s.add("A");
s.add("B");
s.add("D");
s.add("C");
s.add("T");
s.add("E");
System.out.println(s);//結(jié)果就是有序的 [A, B, C, D, E, T]