Java數據結構之Set學習總結

前言:

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

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的使用

添加數據spa

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());

運行結果:code

 經過運行結果能夠看出,Set是不可重複的,TreeSet是有序的,HashSet是無序的。對象

TreeSet實現排序默認是升序,想要實現自定義排序能夠經過傳進去一個Comparator或者TreeSet的添加對象實現Comparator接口。blog

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這種數據結構,更好的在項目中使用不可重複的數據結構。

相關文章
相關標籤/搜索