Heim > Java > javaLernprogramm > Hauptteil

Durchlaufen von Java-Set-Sammlungen und Vergleich von Implementierungsklassen (mit Code)

黄舟
Freigeben: 2017-03-30 10:24:49
Original
1607 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich relevante Informationen zum Java-Set-Durchlauf und Vergleich von Implementierungsklassen vorgestellt. Freunde in Not können sich auf

Java-Set-Durchlauf und Vergleich von Implementierungsklassen

Die Set-Sammlung in Java ist eine Sammlung, die keine wiederholten Elemente enthält. Schauen wir uns zunächst die Traversal-Methode an

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+" "); 
    } 
  } 
}
Nach dem Login kopieren
Hinweis: Geben Sie hier das Set ein Die Sammlung ist vom Typ String.

Wenn wir eine selbstdefinierte Klasseninstanz einfügen, z. B. eine Person-Klasseninstanz, müssen wir den Hashcode und die gleichen Methoden selbst neu schreiben. Schreiben Sie sie mit ihren eigenen Schlüsselfeldern um. Denn bei Verwendung von HashSet wird die Methode hashCode() aufgerufen, um zu bestimmen, ob der Hash-Code-Wert des bereits im Set gespeicherten -Objekts mit dem Hash-Code-Wert des hinzugefügten Objekts übereinstimmt , fügen Sie es direkt hinzu. Wenn sie konsistent sind, vergleichen Sie die Methode equal. Wenn die Methode true zurückgibt, bedeutet dies, dass das Objekt hinzugefügt wurde und kein neues Objekt hinzugefügt wird.

Lassen Sie uns eine weitere wichtige Implementierungsklasse der Set-Sammlung analysieren:

TreeSet verwendet die

natürliche Reihenfolge der Elemente, um die Elemente zu sortieren . oder sortiert nach dem bei der Erstellung des Sets bereitgestellten Komparator, abhängig vom verwendeten Konstruktor.

Um es einfach auszudrücken: Sie können

nach der sortierten -Liste anzeigen oder

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);
Nach dem Login kopieren
nach den angegebenen Regeln sortieren: [a, b , c, d, e, f]


wird nach der Sortierung

ausgegeben. Was ist also, wenn wir möchten, dass es in umgekehrter Reihenfolge ausgegeben wird? Natürlich gibt es viele Möglichkeiten. Hier spezifiziere ich eine Regel zur Ausgabe von

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);//降序排列 
  }
Nach dem Login kopieren
in umgekehrter Reihenfolge. Ausgabe: e d c b a A

Was passiert, wenn die Set-Sammlung einen von uns definierten Klassentyp einfügt?

Hinweis: Stellen Sie sicher, dass Sie eine Sortierregelklasse definieren, die die ComparatorSchnittstelle implementiert, ähnlich der obigen Methode

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; 
  } 
   
}
Nach dem Login kopieren
Ausgabe: 10 20 30 40

Wenn Sie die Punktzahl einer Person in umgekehrter Reihenfolge anordnen, müssen Sie in der Vergleichsmethode nur o2.score-o1.score

ändern

Das obige ist der detaillierte Inhalt vonDurchlaufen von Java-Set-Sammlungen und Vergleich von Implementierungsklassen (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage