Maison >Java >javaDidacticiel >Explication détaillée de la méthode d'implémentation pour supprimer les données en double des tableaux Java

Explication détaillée de la méthode d'implémentation pour supprimer les données en double des tableaux Java

黄舟
黄舟original
2017-09-08 11:15:462292parcourir

Cet article présente principalement la méthode de suppression des données en double des tableaux en Java. Il analyse en détail plusieurs méthodes courantes, principes de mise en œuvre et précautions associées pour supprimer les données en double des tableaux Java sous la forme d'exemples auxquels les amis dans le besoin peuvent se référer. it

L'exemple de cet article décrit la méthode de suppression des données en double des tableaux en Java. Partagez-le avec tout le monde pour référence, les détails sont les suivants :

On m'a demandé lors d'une interview il y a quelque temps : s'il y a des éléments en double dans un tableau, quelle méthode peut être utilisée pour supprimer les doublons ? Pendant un certain temps, j'ai pensé à utiliser une méthode, mais plus tard, après avoir vérifié les informations, j'ai découvert qu'il existe de nombreuses méthodes pour y parvenir. Je vais maintenant résumer certaines des plus simples.

1. Utilisez la collection List pour implémenter


int[] str = {5, 6, 6, 6, 8, 8, 7,4};
List<Integer> list = new ArrayList<Integer>();
for (int i=0; i<str.length; i++) {
  if(!list.contains(str[i])) {
    list.add(str[i]);
  }
}
System.out.println("去除重复后的list集合"+list);

Le résultat de sortie est :


去除重复后的list集合[5, 6, 8, 7, 4]

Vous pouvez voir que les éléments en double peuvent être supprimés, mais la fonction de tri n'est pas implémentée.

2. Utilisez hashSet ou TreeSet pour implémenter


Integer[] nums = { 5, 5, 6, 6, 6, 8, 8, 7, 11, 12, 12 };
// HashSet hset = new HashSet(Arrays.asList(nums));
TreeSet<Integer> hset = new TreeSet<Integer>(Arrays.asList(nums));
Iterator i = hset.iterator();
while(i.hasNext()){
  System.out.println(i.next());
}

Résultat de sortie :


5 6 7 8 11 12

Vous pouvez voir que non seulement les données en double sont supprimées, mais que les données sont également triées.

Arrays.asList() convertit un tableau en objet List. Cette méthode renverra un objet de type ArrayList. Cette classe ArrayList n'est pas la classe java.util.ArrayList, mais une classe interne statique de la classe Arrays !

TreeSet peut non seulement empêcher la répétition des éléments, mais peut également implémenter des collections avec des fonctions telles que le tri. Lorsque des éléments d'objet sont ajoutés à l'ensemble, ils seront automatiquement insérés dans une séquence ordonnée d'objets en fonction de certains. règles de comparaison.

3. Utilisez List et configurez pour implémenter


int[] nums = { 5, 6, 6, 6, 8, 8, 7 };
List<Integer> numList = new ArrayList<Integer>();
for (int i : nums)
  numList.add(i);
Set<Integer> numSet = new HashSet<Integer>();
numSet.addAll(numList);
System.out.println(numSet);

Résultat de sortie :


[5, 6, 7, 8]

On peut constater que les données en double sont également supprimées et triées.

Comparons HashSet et TreeSet :

HashSet

HashSet a les caractéristiques suivantes

1) L'ordre des éléments ne peut pas être garanti et l'ordre peut changer
2) Il n'est pas synchronisé
3) Les éléments de l'ensemble peuvent être nuls, mais ils ne peuvent être placé Entrez un null

Lors du stockage d'un élément dans la collection HashSet, le HashSet appellera la méthode hashCode() de l'objet pour obtenir la valeur hashCode de l'objet, puis décidera de stocker l'objet dans le HashSet en fonction de la valeur hashCode.

Pour faire simple, la norme pour juger de l'égalité de deux éléments dans un ensemble HashSet est que les deux objets sont comparés égaux via la méthode equals, et les valeurs de retour​​du hashCode() La méthode des deux objets est égale

Notez que si vous placez un objet dans un HashSet, remplacez la méthode égale de la classe correspondante de l'objet, et remplacez également sa méthode hashCode(). La règle est que si deux objets renvoient vrai via la comparaison de la méthode égale, leur hashCode doit également être le même. De plus, les attributs standard utilisés comme égaux dans l'objet doivent être utilisés pour calculer la valeur de hashCode.

Classe TreeSet

TreeSet est la seule classe d'implémentation de l'interface SortedSet qui peut garantir que les éléments de la collection sont dans un état trié. TreeSet prend en charge deux méthodes de tri, le tri naturel et le tri personnalisé, dont le tri naturel est la méthode de tri par défaut. Ce qui est ajouté à TreeSet doit être des objets de la même classe.

La façon dont TreeSet détermine que deux objets ne sont pas égaux est que les deux objets renvoient false via la méthode equals, ou que la comparaison via la méthode CompareTo ne renvoie pas 0

Tri naturel

Le tri naturel utilise la méthode CompareTo (Object obj) des éléments à trier pour comparer la relation de taille entre les éléments, puis organiser les éléments par ordre croissant.

Java fournit une interface Comparable, qui définit une méthode compareTo(Object obj), qui renvoie une valeur entière. Les objets qui implémentent cette interface peuvent être comparés en taille.

Si la méthode obj1.compareTo(obj2) renvoie 0, cela signifie que les deux objets comparés sont égaux. Si elle renvoie un nombre positif, cela signifie que obj1 est supérieur à obj2. Si c'est un nombre négatif. nombre, cela signifie que obj1 est inférieur à obj2.

Si nous faisons en sorte que la méthode égale des deux objets renvoie toujours vrai, la méthode compareTo des deux objets devrait renvoyer 0

Tri personnalisé

Le tri naturel est basé sur la taille des éléments de la collection, par ordre croissant. Si vous souhaitez personnaliser le tri, vous devez utiliser l'interface Comparator et implémenter la méthode int compare(T o1,T o2).

Le plus important :

1. TreeSet est implémenté par un arbre à deux différences. Les données du Treeset sont automatiquement triées et les valeurs nulles ne le sont pas. autorisé.

2. HashSet est implémenté par une table de hachage. Les données dans HashSet ne sont pas ordonnées, mais vous ne pouvez mettre qu'une seule valeur nulle dans les deux. seule contrainte.

3. HashSet nécessite que l'objet introduit implémente la méthode HashCode(). L'objet introduit est identifié par le code de hachage. Les objets String avec le même contenu ont le même hashcode, donc le contenu inséré. ne peut pas être répété. Mais les objets de la même classe peuvent être placés dans des instances différentes.

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