Hi ich habe folgende Problemstellung.
Ich habe eine Liste von Strings, wo doppelte Einträge vorhanden sind.
Ich möchte diese Strings zu einer leeren Liste hinzfügen, allerdings nur jeden Eintrag einmal.
Sprich alle doppelten Einträge sollen nicht in die Liste geschrieben werden.
Soweit bin ich schon:
Java:
List<String> datas =newArrayList<String>();List<String> newDatas =newArrayList<String>();for(int i =0; i < datas.size(); i++){String data = datas.get(i);if(!newDatas.get(i).contains(data)){
newDatas.add(data);}}
Ich weiß, dass die if-abfrage falsch ist, ich wollte nur meinen vorhanden code mit posten
Vielleicht hat ja einer Tipps oder Hilfe
Das TreeSet ist eine Möglichkeit, nur sind Iterationen über Bäume relativ langsam, da immer von Objekt zu Objekt gesprungen werden muss.
Der zweite Vorschlag hört sich nach Bruteforce an. Die funktioniert zwar auch und ist meistens die, am leichtesten zu implementierende Lösung aber nicht unbedingt die Beste. Bei großen Mengen an Strings wäre es besser, die erste Liste zu sortieren und danach die Strings zu kopieren, da du dann immer nur einen String mit einem weiteren (dem letzten hinzugefügten) vergleichen musst.
Also ich habe den Code jetzt so weit erweitert. Es funzt aber immer noch nicht.
Ich muss doch am Anfang die size prüfen, um dann erstmal etwas rein zu packen, damit ich danach vergleichen kann oder?
Java:
List<String> datas =newArrayList<String>();List<String> newDatas =newArrayList<String>();for(int i =0; i < datas.size(); i++){String data = datas.get(i);if(newDatas.size()==0){
newDatas.add(data);for(int y =0; y < newDatas.size(); y++){if(!newDatas.get(y).contains(data)){
newDatas.add(data);}}}}
Du könntest auch bei Vorhandensein das erste Element vor den for-Schleifen in die Liste einfügen. Dann würden die for-Schleifen gleich mit einem Element anfangen. Nur müsste die äußere Schleife dann mit dem Index 1 beginnen.
List<String> datas =newArrayList<String>();List<String> newDatas =newArrayList<String>();for(int i =0; i < datas.size(); i++){String data = datas.get(i);if(newDatas.size()==0){
newDatas.add(data);}else{// Variante 1boolean found =false;for(int y =0; y < newDatas.size(); y++){if(newDatas.get(y).equals(data)){
found =true;}}if(found){
newDatas.add(data);}// Variante 2if(!newDatas.contains(data)){
newDatas.add(data);}}}
Hey Joose, meine Lösung sieht jetzt so ähnlich aus.
hab mir eine Hilfsmethode geschrieben die über die Liste iteriert und die Werte vergleicht und
je nach dem true oder false zurück liefert.
Danke trotzdem!