更新時間:2018年08月06日14時24分 來源:傳智播客 瀏覽次數(shù):
(1)迭代器:
**迭代器的next方法是自動向下取元素,要避免出現(xiàn)NoSuchElementException。
也就是在迭代循環(huán)中調(diào)用一次next方法一次就要hasNext判斷一次,比如語句
sop(it.next()+"..."+it.next())會發(fā)生上述異常。
**迭代器的next方法返回值類型是Object,所以要記得類型轉(zhuǎn)換,應(yīng)用泛型后就不用強(qiáng)轉(zhuǎn)
(2)List集合:
**List集合里面的元素因為是帶角標(biāo),所以List集合里面的元素都是有序的,
另外List集合可以包含重復(fù)元素,也可以包含null。
**List集合有迭代器Iterator,還有一個特有迭代器列表ListIterator
**List集合中判斷元素是否相同都是用equals方法,無論contains、remove都依賴equals方法
比如往ArrayList集合里面存放學(xué)生,同名同年齡視為同一個人,此時就需要在學(xué)生類復(fù)寫Object類
里面的equals方法(非常重要!!!要注意!!)
(3)Set集合:
**Set接口里面存放的是元素是無序的,不可以有重復(fù)元素,可以包含null
**Set集合只有一種取出方式,就是迭代器Iterator
**Set集合功能和Collection是一致的,沒有特殊方法
|--->HashSet:
**集合里面存放的元素是無序的,唯一的
**底層數(shù)據(jù)結(jié)構(gòu)是哈希表,哈希表結(jié)構(gòu)的數(shù)據(jù)都是無序的,哈希表結(jié)構(gòu)的操作效率都高效
**線程不同步
**保證元素唯一性的原理是:通過復(fù)寫hashCode和equals方法
****如果兩元素的hashCode值相同,則繼續(xù)判斷兩元素equals是否為真
****如果兩元素的hashCode值不同,則不會調(diào)用equals方法。
**當(dāng)我們往HashSet集合存放自定義的元素時(比如學(xué)生對象),通常都要復(fù)寫hashCode和equals方法,
而且hashCode和equals方法不通過我們調(diào)用,HashSet集合底層內(nèi)部自己調(diào)用,自己拿元素去比較
|--->TreeSet
**TreeSet集合可以對存放的元素進(jìn)行排序,彌補(bǔ)了Set集合元素?zé)o序的缺點(diǎn),且元素是唯一的
**底層數(shù)據(jù)結(jié)構(gòu)是二叉樹,二叉樹結(jié)構(gòu)都是有序的
**線程不同步
**TreeSet集合要求往集合里存放的元素自身具備比較性,否則會報錯
**TreeSet集合保證元素唯一性的依據(jù)是:通過compareTo或者compare方法中的來保證元素的唯一性。
TreeSet排序的第一種方式:讓元素自身具備比較性,
定義元素類實現(xiàn)Compareble接口,覆蓋compare方法,
此方式是元素的自然順序。
TreeSet排序的第二種方式:讓集合具備比較性
當(dāng)元素自身不具備比較性或者具備的比較性不是
我們所需要的比較性時,此時就需要讓集合具備自定義的比較性。
那如何讓集合自身具備比較性呢?
可在集合初始化時,就讓集合具備比較方式。
即定義一個類,實現(xiàn)Comparator接口,覆蓋compare方法。
注:
**判斷元素唯一時,當(dāng)主要條件一樣時,判斷次要條件
**兩種排序方式都在時,以比較器為主!!!
(4)Map集合:
|--Hashtable
底層是哈希表結(jié)構(gòu)
線程安全的,并且鍵和值不能為null。
|--HashMap
底層是哈希表結(jié)構(gòu)
線程不安全的,鍵和值可以為null。
|--LinkedHashMap
底層是鏈表和哈希表
線程不安全
|--TreeMap
底層是二叉樹
線程不安全的
作者:傳智播客JavaEE培訓(xùn)學(xué)院
首發(fā):http://java.itcast.cn/