doppelte Einträge im String Array löschen

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

könnt ihr mir sage wie ich am besten doppelte Einträge aus einem String-Array entferne. Gibt es dazu fertige Funktionen?
 
ich kenne nix fertiges, aber ich poste mal wie ich es machen würde:

Code:
for(int i=0; i<(stringArray.length - 1); i++)
{
	for(int j=(i + 1); j<stringArray.length; j++)
	{
		if(stringArray[i] == stringArray[j])
		{
			String[] temp = new String[stringArray.length - 1];
			System.arraycopy(stringArray, 0, temp, 0, j);
			System.arraycopy(stringArray, j+1, temp, j, temp.length);
			stringArray = temp;
		}
	}
}
 
Warum kein Set?

Ist fertig, einfach zu nutzen, etc.pp.

Collections sollten verwendet werden wo möglich Arrays sind doch viel zu low-level für die meisten Aufgaben.

xysawq, solltest dich auch langsam von arrays und arraycopy trennen 😉
 
Bin zu müde zum umdenken... mache grade ein Praktikum bei Siemens, und die machen das auch so rudimentär wie vor 20 Jahren... 😛

Wenn ich dann irgendwann meine 20 Präsentationen und meine Abschlusspräsentation vorm großen Chef, sowie meine 50 Seiten Fachbericht weg habe werde ich mich mal "weiterbilden"...
 
Set ist ein Interface, HashSet ist ein Implementierung, TreeSet eine andere, die Doku erklärt die Unterschiede 😉 dir reicht das HashSet.

xysawq hat gesagt.:
Bin zu müde zum umdenken... mache grade ein Praktikum bei Siemens, und die machen das auch so rudimentär wie vor 20 Jahren... 😛

Wenn ich dann irgendwann meine 20 Präsentationen und meine Abschlusspräsentation vorm großen Chef, sowie meine 50 Seiten Fachbericht weg habe werde ich mich mal "weiterbilden"...
Mag ja sein, aber diese Array-akrobatik ist Schnee von Vorgestern.
 
Anonymous hat gesagt.:
Hallo,

könnt ihr mir sage wie ich am besten doppelte Einträge aus einem String-Array entferne. Gibt es dazu fertige Funktionen?

Wie maki schon geschrieben hab bietet sich hier ein Set wunderbar an:

Code:
// sa ist hier dein besagtes String[] hab ja keine Ahnung wo das her kommt :)
Set<String> strings = new HashSet<String>();
for (int i = 0; i < sa.length; i++) {
    strings.add(sa[i]);
}
// Das Set enthält jetzt alle im String[] sa vorhandenen Strings und zwar jeden max. 1x
// Wenn du jetzt umbedingt wieder ein String[] haben willst kannst du auch einfach folgendes machen
sa = string.toArray(new String[0]);
 
Ist denn so ein SET auch einem Vector vorzuziehen. Bisher hab ich fast alles mit Vectoren gemacht.
 
Welchen Vorteil hat eigentlich diese Zeile:

Code:
Set<String> strings = new HashSet<String>();

gegenüber dieser:

Code:
HashSet<String> strings = new HashSet<String>();
 
Anonymous hat gesagt.:
Ist denn so ein SET auch einem Vector vorzuziehen. Bisher hab ich fast alles mit Vectoren gemacht.

Ist was anderes. Vector ist synchronisiert (oft unnötig) und ist eine Liste. Was eine Liste und was ein Set ausmacht, kannst du in der Doku nachlesen.
 
Auch wenn es Schnee von gestern ist, keinem ist mein Fehler aufgefallen ^^

Code:
for(int i=0; i<(stringArray.length - 1); i++)
{
   for(int j=(i + 1); j<stringArray.length; j++)
   {
      if(stringArray[i].equals(stringArray[j]))
      {
         String[] temp = new String[stringArray.length - 1];
         System.arraycopy(stringArray, 0, temp, 0, j);
         System.arraycopy(stringArray, j+1, temp, j, temp.length);
         stringArray = temp;
      }
   }
}

muss es richtig heißen... und die Steinzeitmenschen hätten sich damals eine so einfache Lösung auch gewünscht, da gabs noch keine SETs 😛
 
Anonymous hat gesagt.:
Vector ist zu vermeiden, genauso wie Hashtable.

:bahnhof: warum denn das? Ich komme so gut mit Vectoren klar...
Wenn du kein Swing einsetzt welches Vector erzwingt, solltest du die modernen Collections verwenden, Vector und Hashtable sind überbleibsel aus der pre-Collections Ära, wurden zwar nachträglich geändert, allerdings fehlt die klare Linie.
 
Anonymous hat gesagt.:
Welchen Vorteil hat eigentlich diese Zeile:

Code:
Set<String> strings = new HashSet<String>();

gegenüber dieser:

Code:
HashSet<String> strings = new HashSet<String>();

An dieser Stelle bietet es keinen Vorteil. Dass ich Set statt HashSet genommen habe liegt bei mir daran, dass ich an solchen Stellen immer die Interfaces nehme wenn es möglich ist.

Bei Lists mache ich das immer genauso


Code:
List list = new ArrayList(); // Generics ma außen vor gelassen :)

Ein Vorteil kann hier vielleicht sein, dass ich bei List / Set nicht an einen festen Typ von Set / List gebunden bin. Lege ich ein HashSet an dann habe ich eben ein HashSet. Lege ich aber ein Set an (z. B. eben dann mit = new HashSet) kann ich an einer späteren Stelle aber auch sagen = new TreeSet ohne mir ein neues Objekt machen zu müssen.

Ist ein schlechtes Beispiel aber vielleicht verstehst du was ich meine 😀
 
ohje, da hab ich mir wohl gestern einen mecker-vogel angelacht der nur mist von sich gibt... naja... kann man wohl nix machen

hoffentlich verPFEIFT der sich bald!
 
Anonymous hat gesagt.:
Vector ist zu vermeiden, genauso wie Hashtable.

:bahnhof: warum denn das? Ich komme so gut mit Vectoren klar...

Vector ist eigentlich "veraltet". Mit java 1.2 kam das neue Collection Framework und
Vector wurde da reingedrückt um irgenwie zu passen. Aus kompatibilitätsgründen kann
die Klasse nicht entfernt werden. Stack erbt von Vector (brrrrrrr).

für diese Funktionalität List benutzen. Wenn synchronosiert sein soll
Collections.synchronizedList(list)
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben