2017-06-26 1 views
-1

Hinweis: Diese Frage ist für meine Aufgabe. Es gibt also einige Regeln, die vielleicht nicht normal sind.Wie überlisten Sie Listenelemente und löschen Sie doppelte, während Sie die ursprüngliche Reihenfolge beibehalten?

Ich habe gerade festgestellt, meine Frage macht keinen Sinn. Also habe ich es bearbeitet.

Angenommen, ich eine Liste mit ganzen Zahlen [1,2,3,4,1,2,1,5]

Durch einen Iterator verwenden, wie kann ich duplizierten Elemente entfernen, während die Reihenfolge der Elemente zu halten ohne Unterbrechung? Das erwartete Ergebnis für die obige Liste sollte [1,2,3,4,5] sein.

Was ich zur Zeit mit aufkam ist das gleiche wie das, was Manash Ranjan Dakua in dieser Frage beantwortet How do I remove repeated elements from ArrayList?

public static void main(String[] args){ 
ArrayList<Object> al = new ArrayList<Object>(); 
al.add("abc"); 
al.add('a'); 
al.add('b'); 
al.add('a'); 
al.add("abc"); 
al.add(10.3); 
al.add('c'); 
al.add(10); 
al.add("abc"); 
al.add(10); 
System.out.println("Before Duplicate Remove:"+al); 
for(int i=0;i<al.size();i++){ 
    for(int j=i+1;j<al.size();j++){ 
     if(al.get(i).equals(al.get(j))){ 
      al.remove(j); 
      j--; 
     } 
    } 
} 
System.out.println("After Removing duplicate:"+al); 

}

Aber wenn ich will hier Iterator verwenden, anstatt für Schleifen? Wie kann ich das erreichen (doppelte Artikel entfernen, während die Reihenfolge unverändert bleibt)?

Wenn die Frage nicht klar genug oder zu vage ist. Bitte weisen Sie darauf hin! Ich werde versuchen, es umzuformulieren.

Vielen Dank für Ihre Hilfe!

+0

Ich bin unklar, was Sie fragen. Warum nicht einfach den Iterator benutzen, den Sie gerade haben? –

+0

@HovercraftFullOfEels Sie haben recht Ich habe meine Frage nicht klar genug gestellt –

+0

@FedericoPeraltaSchaffner Nun, Regeln durch Kurszuweisung festgelegt .... müssen Iteratoren verwenden –

Antwort

0

Sie können einfach erneut .next() aufrufen, wodurch Sie zum nächsten Element im Array weitergehen können. Wenn Sie jedoch einen neuen Iterator für die restlichen Elemente erhalten möchten, sollten Sie .next() über den Rest der Liste verwenden, indem Sie jedes Element zu einer neuen Datenstruktur hinzufügen und dann .iterator aufrufen() auf dieser neuen Datenstruktur.

4

Sie müssen Iterator nicht verwenden, um dies zu erreichen. Ein einfacher Weg ist die Verwendung von LinkedHashSet, die erlaubt, einzigartige Elemente nur wie HashSet (keine Duplikate) und unterhält Insertionsreihenfolge zu enthalten.

Beispiel:

List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,1,2,1,5)); 
Set<Integer> set = new LinkedHashSet<>(); 
set.addAll(list); 
// or as suggested by assylias, Set<Integer> set = new LinkedHashSet<>(list); 
System.out.println(list); 
System.out.println(set); 

Ausgang:

[1, 2, 3, 4, 1, 2, 1, 5] 
[1, 2, 3, 4, 5] 
+1

Oder einfach 'Set set = new LinkedHashSet <> (list);' und 'Arrays.asList (1,2,3,4,1,2,1,5)'. – assylias

Verwandte Themen