Java資料結構之Set學習總結

總李寫程式碼發表於2017-03-14

前言:

   前面介紹了Java的資料結構List、Map,今天抽空學習總結一下另一種資料結構Set。

Set介紹

   Set相對於List、Map是最簡單的一種集合。集合中的物件不按特定的方式排序,並且沒有重複物件。

特點:

  •  它不允許出現重複元素;
  • 不保證和政集合中元素的順序
  • 允許包含值為null的元素,但最多隻能有一個null元素

Set是一個介面,例項化Set可以採用下面的方式:

  • HashSet: HashSet類按照雜湊演算法來存取集合中的物件,存取速度比較快 
  • TreeSet :TreeSet類實現了SortedSet介面,能夠對集合中的物件進行排序 

Set的基本操作:

  •  boolean add(Object o)   :向集合中加入一個物件的引用
  • void clear()                        :刪除集合中所有的物件,即不再持有這些物件的引用
  • boolean isEmpty()           :判斷集合是否為空
  • boolean contains(Object o): 判斷集合中是否持有特定物件的引用
  • Iterartor iterator()              : 返回一個Iterator物件,可以用來遍歷集合中的元素
  • boolean remove(Object o):從集合中刪除一個物件的引用
  • int size()                               :返回集合中元素的數目
  • Object[] toArray()                 :返回一個陣列,該陣列中包括集合中的所有元素

Set的使用

新增資料

Set<Integer> hashSet = new HashSet<Integer>();
 hashSet.add(3);
 hashSet.add(2);
 hashSet.add(5);
 hashSet.add(1);
 //模擬新增一個重複資料
 hashSet.add(2);
 Log.e(TAG,"set hashSet :"+hashSet+" size : "+hashSet.size());

 Set<Integer> treeSet = new TreeSet<>();
 treeSet.add(3);
 treeSet.add(2);
 treeSet.add(5);
 treeSet.add(1);
 Log.e(TAG,"set treeSet :"+treeSet +" size : "+treeSet.size());

執行結果:

 通過執行結果可以看出,Set是不可重複的,TreeSet是有序的,HashSet是無序的。

TreeSet實現排序預設是升序,想要實現自定義排序可以通過傳進去一個Comparator或者TreeSet的新增物件實現Comparator介面。

Set遍歷

for迴圈方式

  for (Integer integer :hashSet){
            Log.e(TAG,"set integer :"+integer);
   }

迭代器方式

Iterator<Integer> iterator =hashSet.iterator();
while (iterator.hasNext()){
     Integer integer=iterator.next();
     Log.e(TAG,"set integer :"+integer);
   }

知識擴充套件:

 最近在阿里java開發手冊上看到了這句話:Map/Set 的 key 為自定義物件時,必須重寫 hashCode 和 equals。這裡Set集合中放入的是String型別,假如我們放入一個自己定義的類例項的時候,比如Person類例項,這時候我們要自己重新hashcode和equal方法,用自己的關鍵欄位來重寫,因為當使用HashSet時,hashCode()方法就會得到呼叫,判斷已經儲存在集合中的物件的hash code值是否與增加的物件的hash code值一致;如果不一致,直接加進去;如果一致,再進行equals方法的比較,equals方法如果返回true,表示物件已經加進去了,就不會再增加新的物件,否則加進去

總結:

 主要重新熟悉一下Map這種資料結構,更好的在專案中使用不可重複的資料結構。

 

相關文章