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

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

黄舟
黄舟original
2017-03-30 10:24:491646parcourir

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+" "); 
    } 
  } 
}
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);
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);//降序排列 
  }
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; 
  } 
   
}
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!

Déclaration:
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