Maison > Java > javaDidacticiel > le corps du texte

Traversée des collections Java Set et comparaison des classes d'implémentation (avec code)

黄舟
Libérer: 2017-03-30 10:24:49
original
1592 Les gens l'ont consulté

Cet article présente principalement des informations pertinentes sur le parcours et la comparaison de Java Set et la comparaison des classes d'implémentation. Les amis dans le besoin peuvent se référer à

Parcours et comparaison de Java Set Comparaison des classes d'implémentation <.>

La collection Set en Java est une collection qui ne contient pas d'éléments répétés. Tout d'abord, regardons la méthode de traversée

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+" "); 
    } 
  } 
}
Copier après la connexion
Remarque : ici, mettre dans la collection Set est. de type String.

Si nous insérons une instance de classe auto-définie, telle qu'une instance de classe Person, alors nous devons réécrire nous-mêmes le hashcode et les méthodes égales Les réécrire avec leurs propres champs clés. en utilisant HashSet, la méthode hashCode() sera appelée pour déterminer si la valeur du code de hachage de l' objet déjà stocké dans l'ensemble est cohérente avec la valeur du code de hachage de l'objet ajouté, si elle est incohérente, ajoutez ; directement ; S'ils sont cohérents, comparez-les avec la méthode égal. Si la méthode égal renvoie vrai, cela signifie que l'objet a été ajouté et qu'aucun nouvel objet ne sera ajouté, sinon il sera ajouté.

Analysons une autre classe d'implémentation importante de la collection Set, TreeSet

TreeSet utilise l'

ordre naturel des éléments pour trier les éléments. , ou triés selon le Comparator fourni lors de la création de l'ensemble, en fonction du constructeur utilisé.

Pour faire simple, vous pouvez afficher

selon la liste triée, ou vous pouvez trier

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);
Copier après la connexion
selon les règles spécifiées. Sortie : [a, b , c, d, e, f]


est sorti après le tri

Et si nous voulons qu'il soit sorti dans l'ordre inverse ? Bien sûr, il existe de nombreuses façons. Ici, je spécifie une règle pour lui permettre de sortir

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);//降序排列 
  }
Copier après la connexion
dans l'ordre inverse Sortie : e d c b a A

Et si la collection Set mettait un type de classe défini par nous-mêmes ?

Remarque : assurez-vous de définir une classe de règles de tri qui implémente l'interface Comparator, similaire à la méthode ci-dessus

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; 
  } 
   
}
Copier après la connexion
Sortie : 10 20 30 40

Si vous organisez dans l'ordre inverse du score d'une personne, il vous suffit de changer o2.score-o1.score

dans la méthode de comparaison

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!