首頁  >  文章  >  Java  >  Java Set集合的遍歷及實作類別的比較(附程式碼)

Java Set集合的遍歷及實作類別的比較(附程式碼)

黄舟
黄舟原創
2017-03-30 10:24:491547瀏覽

這篇文章主要介紹了Java Set集合的遍歷及實現類別的比較的相關資料,需要的朋友可以參考下

Java Set集合的遍歷及實作類別的比較

Java中Set集合是一個不包含重複元素的Collection,首先我們先來看看遍歷方法

package com.sort; 
 
import java.util.HashSet; 
import java.util.Iterator; 
import java.util.Set; 
 
/** 
 * 一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2, 
 * @author Owner 
 * 
 */ 
public class SetTest2 { 
 
  public static void main(String[] args) { 
    Set<String> set = new HashSet<String>(); 
     
    set.add("a"); 
    set.add("b"); 
    set.add("c"); 
    set.add("d"); 
    set.add("e"); 
     
    set.add("e");//不能放入重复数据 
     
    /** 
     * 遍历方法一,迭代遍历 
     */ 
    for(Iterator<String> iterator = set.iterator();iterator.hasNext();){ 
      System.out.print(iterator.next()+" "); 
    } 
     
    System.out.println(); 
    System.out.println("********************"); 
     
    /** 
     * for增强循环遍历 
     */ 
    for(String value : set){ 
      System.out.print(value+" "); 
    } 
  } 
}

注意:這裡Set集合中放入的是String類型,假如我們放入一個自己定義的類別實例的時候,例如Person類別實例,這時候我們要自己重新hashcode和equal方法,用自己的關鍵字段來重寫,因為當使用HashSet時,hashCode()方法就會得到調用,判斷已經儲存在集合中的物件的hash code值是否與增加的物件的hash code值一致;如果不一致,直接加進去;如果一致,再進行equals方法的比較,equals方法如果返回true,表示對像已經加進去了,就不會再增加新的對象,否則加進去。

下面分析Set集合的另一個重要實作類別TreeSet,

#TreeSet使用元素的自然順序對元素進行排序,或根據建立set 時提供的Comparator 進行排序,取決於使用的​​建構方法

通俗一點講,就是可以依照排序後的列表顯示,也可以依照指定的規則排序

Set<String> set = new TreeSet<String>(); 
     
    set.add("f"); 
    set.add("a"); 
    set.add("b"); 
    set.add("c"); 
    set.add("d"); 
    set.add("e"); 
     
    System.out.println(set);

輸出:[a, b, c , d, e, f]

依照排序後輸出

那麼如果我們想讓他倒序輸出呢?當然方法很多。這裡我採用指定一個規則讓他倒序輸出

package com.sort; 
 
import java.util.Comparator; 
import java.util.Iterator; 
import java.util.Set; 
import java.util.TreeSet; 
 
public class TreeSetTest3 { 
 
  public static void main(String[] args) { 
    Set<String> set = new TreeSet<String>(new MyComparator()); 
     
    set.add("a"); 
    set.add("b"); 
    set.add("c"); 
    set.add("d"); 
    set.add("e"); 
    set.add("A"); 
     
    for(Iterator<String> iterator = set.iterator();iterator.hasNext();){ 
      System.out.print(iterator.next()+" "); 
    } 
  } 
} 
 
class MyComparator implements Comparator<String>{ 
 
  @Override 
  public int compare(String o1, String o2) { 
     
    return o2.compareTo(o1);//降序排列 
  }

輸出:e d c b a A

如果Set集合中放入的是我們自己定義的一個類別類型呢?

注意:一定要定義一個排序規則類別實作Comparator介面,與上面的方法類似

package com.sort; 
 
import java.util.Comparator; 
import java.util.Iterator; 
import java.util.Set; 
import java.util.TreeSet; 
 
public class TreeSetTest2 { 
 
  public static void main(String[] args) { 
    Set<Person> set = new TreeSet<Person>(new PersonComparator()); 
     
    Person p1 = new Person(10); 
    Person p2 = new Person(20); 
    Person p3 = new Person(30); 
    Person p4 = new Person(40); 
     
    set.add(p1); 
    set.add(p2); 
    set.add(p3); 
    set.add(p4); 
     
    for(Iterator<Person> iterator = set.iterator();iterator.hasNext();){ 
      System.out.print(iterator.next().score+" "); 
    } 
  } 
} 
 
class Person{ 
  int score; 
   
  public Person(int score){ 
    this.score = score; 
  } 
   
  public String toString(){ 
    return String.valueOf(this.score); 
  } 
} 
 
class PersonComparator implements Comparator<Person>{ 
 
  @Override 
  public int compare(Person o1, Person o2) { 
     
    return o1.score - o2.score; 
  } 
   
}

輸出:10 20 30 40

如果按照一個人的分數的倒序排列,只需要更改compare方法中的o2.score-o1.score

以上是Java Set集合的遍歷及實作類別的比較(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn