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