教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

集合類各種容器的使用注意細(xì)節(jié)

更新時(shí)間:2018年08月06日14時(shí)24分 來源:傳智播客 瀏覽次數(shù):

  (1)迭代器:

  **迭代器的next方法是自動(dòng)向下取元素,要避免出現(xiàn)NoSuchElementException。

  也就是在迭代循環(huán)中調(diào)用一次next方法一次就要hasNext判斷一次,比如語句

  sop(it.next()+"..."+it.next())會(huì)發(fā)生上述異常。

  **迭代器的next方法返回值類型是Object,所以要記得類型轉(zhuǎn)換,應(yīng)用泛型后就不用強(qiáng)轉(zhuǎn)

  (2)List集合:

  **List集合里面的元素因?yàn)槭菐Ы菢?biāo),所以List集合里面的元素都是有序的,

  另外List集合可以包含重復(fù)元素,也可以包含null。

  **List集合有迭代器Iterator,還有一個(gè)特有迭代器列表ListIterator

  **List集合中判斷元素是否相同都是用equals方法,無論contains、remove都依賴equals方法

  比如往ArrayList集合里面存放學(xué)生,同名同年齡視為同一個(gè)人,此時(shí)就需要在學(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值不同,則不會(huì)調(diào)用equals方法。

  **當(dāng)我們往HashSet集合存放自定義的元素時(shí)(比如學(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集合要求往集合里存放的元素自身具備比較性,否則會(huì)報(bào)錯(cuò)

  **TreeSet集合保證元素唯一性的依據(jù)是:通過compareTo或者compare方法中的來保證元素的唯一性。

  TreeSet排序的第一種方式:讓元素自身具備比較性,

  定義元素類實(shí)現(xiàn)Compareble接口,覆蓋compare方法,

  此方式是元素的自然順序。

  TreeSet排序的第二種方式:讓集合具備比較性

  當(dāng)元素自身不具備比較性或者具備的比較性不是

  我們所需要的比較性時(shí),此時(shí)就需要讓集合具備自定義的比較性。

  那如何讓集合自身具備比較性呢?

  可在集合初始化時(shí),就讓集合具備比較方式。

  即定義一個(gè)類,實(shí)現(xiàn)Comparator接口,覆蓋compare方法。

  注:

  **判斷元素唯一時(shí),當(dāng)主要條件一樣時(shí),判斷次要條件

  **兩種排序方式都在時(shí),以比較器為主!!!

  (4)Map集合:

  |--Hashtable

  底層是哈希表結(jié)構(gòu)

  線程安全的,并且鍵和值不能為null。

  |--HashMap

  底層是哈希表結(jié)構(gòu)

  線程不安全的,鍵和值可以為null。

  |--LinkedHashMap

  底層是鏈表和哈希表

  線程不安全

  |--TreeMap

  底層是二叉樹

  線程不安全的


  作者:傳智播客JavaEE培訓(xùn)學(xué)院

  首發(fā):http://java.itcast.cn/

0 分享到:
和我們在線交談!