1 集合和數組之間的主要區別
- 數組是定長的,集合是不定長的;
- 數組的類型是確定的,集合類的類型可以是不確定的,可以存儲不同類型的對象;
2 集合框架Collection(從底層不斷向上抽取而成的)
這些容器的主要區別是:每一個容器對數據的存儲方式不同,即數據結構不同。相同之處是:都是容器。
2.1 Collection中常用的共性方法(下面標出不熟悉的)
- containsAll(Collection<?> c):兩個集合之間的交集。
- removeAll:移除兩個集合之間的交集。
- retainAll(Collection<?> c):兩個集合之間的交集。
2.2 Iterator迭代器
因為每個集合的數據結構不同,所以每個取出的方式與不同,但是都有共性的內容:判斷和取出。
那么就可以將共性抽取,形成一個內部類。這些內部類都符合一個規則,該規則就是Iterator,通過對外提供一個方法iterator()來獲取元素。
2.3 List
2.31 List共性方法(不熟悉)
- indexOf:返回此列表中首次出現的指定元素的索引,或如果此列表不包含元素,則返回 -1。更確切地講,返回滿足 (o==null ? get(i)==null : o.equals(get(i)))的最低索引i ,如果不存在此類索引,則返回 -1。
- lastIndexOf:返回此列表中最后一次出現的指定元素的索引,或如果此列表不包含索引,則返回 -1。更確切地講,返回滿足(o==null ? get(i)==null : o.equals(get(i)))的最高索引 i,如果不存在此類索引,則返回 -1。
2.32 Arraylist(元素可重復,有序)
Arraylist特點:查詢速度很快,但是增刪稍慢。底層的數據結構是數組。線程不同步。默認長度為10,超出10時,50%延長。
元素有序和可以重復的原因:
該集合中存在索引,可以通過索引順序取得元素,同樣相同的元素也可以通過不同的索引來區分。Arraylist中的Contians()和remove()方法底層依賴的是equals方法。
ListIterator方法
注意點:不能既用ArrayList的add方法去添加元素,同時又用ArrayList中的Iterator方法去取出元素。這樣會導致并發修改異常。而且Iterator只能對元素進行判斷、取出、刪除的操作。
如果希望對元素進行如添加、修改等,就需要使用其子接口,ListIterator方法。
該接口只能通過List集合的ListIterator方法獲取。
2.33 LinkedList
LinkedList底層使用的鏈表數據結構。
特點:增刪速度很快,查詢稍慢。
LinkedList中的特有方法:
- 增加元素:addFirst(),addLast()和取出元素:getFirst(),getLast()和根據索引取出元素方法get();
- 添加元素:offer(末尾添加元素)、offerFirst(頭部添加)、offerLast(尾部添加);
- 獲取不移除:peek、peekFirst、peekLast;
- 獲取并移除:poll、pollFirst、pollLast;
- 取出和插入:pop、push
2.34 Vector
Vector底層是數組數據結構,Vector線程同步的。默認長度為10,超出10時,100%延長。
元老級干部,幾乎被ArrayList替代。