1 數(shù)組和集合區(qū)別
2. 集合常見的方法
3. 常用集合分類
3.1 Collection接口下的
-
List接口
- LinkList:鏈表, 插入刪除憔购, 沒有同步, 線程不安全
- ArrayList: 數(shù)組, 隨機訪問, 沒有同步侨舆, 線程不安全
- Vector:數(shù)組秒紧, 同步, 線程安全
-
Set接口
- HashSet:底層數(shù)據(jù)結(jié)構(gòu)是哈希表(是一個元素為鏈表的數(shù)組)
- TreeSet:底層數(shù)據(jù)結(jié)構(gòu)是紅黑樹(是一個自平衡的二叉樹)
- LinkedHashSet:底層數(shù)據(jù)結(jié)構(gòu)由哈希表和鏈表組成挨下。
3.2 Map接口下的
- HashTable:同步熔恢, 線程安全
- HashMap:沒有同步, 線程不安全-
- TreeMap:紅黑樹對所有的key進行排序
- IdentifyHashMap
4. List和set的區(qū)別
- 重復(fù)元素:list可以允許重復(fù)元素,set不允許
- 有序性:list是一個有序的容器复颈,保持了每個元素的插入順序绩聘。即輸出順序就是輸入順序沥割,而set方法是無序容器耗啦,無法保證每個元素的存儲順序,TreeSet通過 Comparator 或者 Comparable 維護了一個排序順序
- null元素:list可以插入多個null元素,而set只允許插入一個null元素
5. 迭代器(Iterator)
Collection的源碼中繼承了Iterable机杜,有iterator()這個方法
Iterable是一個接口帜讲,它有iterator()這個方法,返回的是Iterator
Iterator也是一個接口椒拗,它只有四個方法:
- hasNext()
- next()
- remove()
- forEachRemaining()
在ArrayList內(nèi)部首先是定義一個內(nèi)部類Itr似将,該內(nèi)部類實現(xiàn)Iterator接口,如下:
而ArrayList的iterator()方法實現(xiàn)
public Iterator<E> iterator() {
return new Itr();
}
Iterator(迭代器)是一個接口蚀苛,它的作用就是遍歷容器的所有元素在验。
ArrayList<String> arrayList = new ArrayList<>();
Iterator<String> iterator = arrayList.iterator();
Iterator的意義
遍歷ArrayList 和Linklist是十分容易的,遍歷Tree容器也不難堵未,但是實現(xiàn)機制是完全不同腋舌,而遍歷Set容器就無從下手了。 所以Java設(shè)計了Iterator 這個接口渗蟹,分別讓各種容器自己去重寫里面的hasNext()和next()方法块饺。不用關(guān)心各種容器的遍歷機制,只要使用Iterator雌芽,會讓人覺得各種容器的遍歷方法都是一樣的授艰,這就是Java接口的重要意義。
幾個遍歷的比較
- for一般可以用于簡單的順序集合世落,并且可以預(yù)測集合的大谢刺凇;
- foreach可以遍歷任何集合或者數(shù)組屉佳,但是使用者需要知道遍歷元素的類型谷朝。
- iterator是最強大的,它可以隨之修改元素內(nèi)部的元素忘古∨墙可以在遍歷的時刻用remove()