Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung der Implementierungsmethode zum Entfernen doppelter Daten aus Java-Arrays

Detaillierte Erläuterung der Implementierungsmethode zum Entfernen doppelter Daten aus Java-Arrays

黄舟
黄舟Original
2017-09-08 11:15:462215Durchsuche

Dieser Artikel stellt hauptsächlich die Methode zum Entfernen doppelter Daten aus Arrays in Java vor. Er analysiert detailliert mehrere gängige Methoden, Implementierungsprinzipien und zugehörige Vorsichtsmaßnahmen zum Entfernen doppelter Daten aus Java-Arrays in Form von Beispielen it

Das Beispiel in diesem Artikel beschreibt die Methode zum Entfernen doppelter Daten aus Arrays in Java. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Ich wurde vor einiger Zeit in einem Interview gefragt: Wenn es doppelte Elemente in einem Array gibt, mit welcher Methode können die Duplikate entfernt werden? Eine Zeit lang dachte ich darüber nach, eine Methode zu verwenden, aber nachdem ich die Informationen überprüft hatte, stellte ich fest, dass es viele Methoden gibt, um dies zu erreichen. Jetzt werde ich einige der einfacheren zusammenfassen.

1. Verwenden Sie die Listensammlung, um


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);

zu implementieren. Das Ausgabeergebnis ist:


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

Sie können sehen, dass doppelte Elemente entfernt werden können, die Sortierfunktion jedoch nicht implementiert ist.

2. Verwenden Sie hashSet oder TreeSet, um


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());
}

Ausgabeergebnis:

zu implementieren


5 6 7 8 11 12

Sie können sehen, dass nicht nur die doppelten Daten entfernt, sondern auch die Daten sortiert werden.

wobei Arrays.asList() ein Array in ein List-Objekt konvertiert. Diese Methode gibt ein ArrayList-Objekt zurück. Diese ArrayList-Klasse ist nicht die java.util.ArrayList-Klasse, sondern eine statische interne Klasse der Arrays-Klasse.

TreeSet kann nicht nur die Wiederholung von Elementen verhindern, sondern auch Sammlungen mit Funktionen wie Sortieren implementieren. Wenn Objektelemente zum Satz hinzugefügt werden, werden sie automatisch in eine geordnete Reihenfolge von Objekten eingefügt Vergleichsregeln.

3. Verwenden Sie Liste und stellen Sie die Implementierung ein


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);

Ausgabeergebnis:


[5, 6, 7, 8]

Es ist zu erkennen, dass auch doppelte Daten entfernt und sortiert werden.

Vergleichen wir HashSet und TreeSet:

HashSet

HashSet hat die folgenden Eigenschaften

1) Die Reihenfolge der Elemente kann nicht garantiert werden und die Reihenfolge kann sich ändern
2) Es ist nicht synchronisiert
3) Set-Elemente können null sein, aber sie können nur null sein platziert Geben Sie eine Null ein

Beim Speichern eines Elements in der HashSet-Sammlung ruft HashSet die hashCode()-Methode des Objekts auf, um den hashCode-Wert des Objekts abzurufen, und entscheidet dann, das Objekt im HashSet zu speichern basierend auf dem HashCode-Wert.

Einfach ausgedrückt besteht der Standard zur Beurteilung der Gleichheit zweier Elemente in einem HashSet-Satz darin, dass die beiden Objekte durch die Methode „equals“ gleich verglichen werden und die Rückgabewerte von hashCode() Die Methode der beiden Objekte ist gleich

Beachten Sie, dass beim Einfügen eines Objekts in ein HashSet die Methode equal der entsprechenden Klasse des Objekts und auch dessen Methode hashCode() überschrieben werden müssen. Die Regel lautet: Wenn zwei Objekte durch den Vergleich der Methode „equals“ „true“ zurückgeben, sollte auch ihr HashCode derselbe sein. Darüber hinaus sollten die im Objekt als gleichwertig verwendeten Standardattribute zur Berechnung des Werts von hashCode verwendet werden.

TreeSet-Klasse

TreeSet ist die einzige Implementierungsklasse der SortedSet-Schnittstelle, die sicherstellen kann, dass die Sammlungselemente in einem sortierten Zustand sind. TreeSet unterstützt zwei Sortiermethoden: natürliche Sortierung und benutzerdefinierte Sortierung, wobei die natürliche Sortierung die Standardsortiermethode ist. Was TreeSet hinzugefügt wird, sollten Objekte derselben Klasse sein.

TreeSet stellt fest, dass zwei Objekte nicht gleich sind, indem die beiden Objekte über die Methode „equals“ false zurückgeben oder der Vergleich über die Methode „CompareTo“ nicht 0 zurückgibt

Natürliche Sortierung

Bei der natürlichen Sortierung wird die CompareTo-Methode (Object obj) der zu sortierenden Elemente verwendet, um die Größenbeziehung zwischen Elementen zu vergleichen und die Elemente dann in aufsteigender Reihenfolge anzuordnen.

Java stellt eine Comparable-Schnittstelle bereit, die eine CompareTo(Object obj)-Methode definiert, die einen ganzzahligen Wert zurückgibt. Objekte, die diese Schnittstelle implementieren, können in der Größe verglichen werden.

Wenn die Methode obj1.compareTo(obj2) 0 zurückgibt, bedeutet dies, dass die beiden verglichenen Objekte gleich sind. Wenn sie eine positive Zahl zurückgibt, bedeutet dies, dass obj1 größer als obj2 ist Zahl bedeutet, dass obj1 kleiner als obj2 ist.

Wenn wir dafür sorgen, dass die Methode „equals“ der beiden Objekte immer „true“ zurückgibt, sollte die Methode „compareTo“ der beiden Objekte 0 zurückgeben

Benutzerdefinierte Sortierung

Die natürliche Sortierung basiert auf der Größe der Sammlungselemente in aufsteigender Reihenfolge. Wenn Sie die Sortierung anpassen möchten, sollten Sie die Comparator-Schnittstelle verwenden und die Methode int Compare(T o1,T o2) implementieren.

Das Wichtigste:

1. TreeSet wird durch einen Zwei-Differenz-Baum implementiert. Die Daten im Treeset werden automatisch sortiert, Nullwerte jedoch nicht erlaubt.

2. HashSet wird durch eine Hash-Tabelle implementiert. Sie können Nullen eingeben, aber Sie können nur eine Null eingeben, genau wie die Datenbank einzige Einschränkung.

3. HashSet erfordert, dass das eingefügte Objekt die HashCode()-Methode implementiert. Das eingefügte Objekt wird durch den Hashcode-Code identifiziert, und String-Objekte mit demselben Inhalt haben den gleichen Hashcode, also das eingefügte Objekt Inhalte können nicht wiederholt werden. Objekte derselben Klasse können jedoch in verschiedene Instanzen eingefügt werden.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Implementierungsmethode zum Entfernen doppelter Daten aus Java-Arrays. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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