1. 程式人生 > >JAVA集合注意事項-Set

JAVA集合注意事項-Set

所有的Java集合類都位於java.util包下

集合裡只能儲存物件

Set中元素不能重複 List類似陣列且其長度可變 Map儲存鍵值對

Collection是List,Set,Queue介面的父介面

 所有Collection都重寫了toString()方法

當程式呼叫Iterable的forEach遍歷集合元素,可以使用lambda表示式遍歷集合

當使用Iterator迭代訪問Collection集合元素時,Collection集合裡的元素不能改變,必須先使用iterator裡的remove(0刪除上一次的next(0方法返回的元素才可以

Iterator並不是把集合元素本身傳給了迭代變數。而是把集合元素的值傳給了迭代變數,修改迭代變數的值對集合元素本身沒有任何影響;同樣在forEach迴圈中修改迭代變數的值也沒有任何意義

使用Predicate物件可以利用lambda表示式對集合進行批量操作,同樣可以呼叫Stream流進行聚集操作

HashSet通過equals()方法比較相等。並且兩個物件的hashCode()返回值相等,重寫時應該保證二者返回值相同

當程式把可變物件新增到HashSet中時候,儘量不要去修改集合元素中參與計算hashCode(),equals()的例項變數,否則會導致HashSet無法正確操作這些集合物件

LinkedHashSet依然是HashSet,依然不允許元素進行重複

TreeSet,並不是根據元素插入順序進行排序,而是根據元素大小進行排序的。其支援自然排序和定製排序

自然排序:呼叫compareTo()方法,如果該方法返回0,則表明兩個物件相等,如果返回一個正整數,則表明obj1大於obj2,反之則表明obj1小於obj2

向TreeSet中新增的應該是同一個類的物件,使用compareTo()時候應該先強制轉換成相同型別

如果兩個物件通過compareTo()返回0時,其equals()方法應該返回true

儘量不要修改放入TreeSet中的關鍵例項變數

定製排序:使用Comparator介面的幫助,利用lambda表示式代替Comparator物件

EnumSet不允許加入null元素

Collection集合中的所有元素必須是同一個列舉類的列舉值

Set效能分析

HashSet普遍優於TreeSet,只有要保持一個排序的Set時,才應該使用TreeSet

EnumSet是最好的,但只能儲存同一個列舉值作為集合元素