Bei einem Array wie dem unten stehenden habe ich mich gefragt, ob es eine einfache Möglichkeit gibt, dieses Array in ein Array mit einzigartigen Werten zu verwandeln.
Dies ist gegeben:
%Vor%Verwandle es in ein Ergebnis-Array wie dieses und behalte die ursprüngliche Reihenfolge bei:
%Vor% Verwenden Sie in Java 8 IntStream
, um eindeutige Elemente eines Arrays zu erhalten
Der einfachste Weg wäre, Set aus dem Array zu erstellen.
%Vor%und dann können Sie das Array mit:
abrufen %Vor%Verwenden Sie LinkedHashSet , wenn Sie die Reihenfolge beibehalten möchten, oder TreeSet , wenn Sie es sortiert haben möchten.
Zwei Optionen
Behalten Sie eine Karte von count und element und verwenden Sie schließlich nur diese Elemente mit count 1. (Benötigen zusätzlichen Speicherplatz, sind aber schneller)
Sortieren Sie das Array und verwenden Sie beim Durchlaufen des Arrays nur nicht wiederholte.
Benötigt keinen zusätzlichen Platz, ist aber O (n lg (n))
Hier sind zwei Ideen:
Fügen Sie alle Elemente zu einem Set hinzu oder erstellen Sie ein Element mit dem Konstruktor, der ein Array als Parameter hat ( HashSet
oder TreeSet
, abhängig von der gewünschten Zeitkomplexität). Entfernen Sie dann für jedes Element in der Gruppe das Element, und fügen Sie es an der nächsten offenen Position eines neuen Arrays mit der Größe der Gruppe an.
Sortieren Sie das Array. Fügen Sie das Objekt mit dem Index 0 zu einem ArrayList
hinzu. Beginne bei Index 1 und gehe zum Index length - 1
. Wenn das aktuelle Element nicht gleich dem Element des vorherigen Index ist, fügen Sie es zu ArrayList
hinzu. Ändern Sie die ArrayList
bei Bedarf in ein Array.
(Umbenennung von Ссылка )
Bei Verwendung der Stream-API von Java 8 handelt es sich um eine Lösung mit einem generischen Array-Typ:
%Vor%Es funktioniert für jedes Objekttyp-Array, aber nicht für primitive Arrays.
Für primitive Arrays sieht das so aus:
%Vor%Und schließlich ist hier ein kleiner Komponententest:
%Vor%