# Array verkleinern und sortieren



## Pudelchen (8. Dez 2004)

Also folgende problem stellung. Ist wahrscheinlich eine BabyFrage aber ich stell sie trotzdem.
ich brauch folgenden Algorithmus:
Ich habe ein String Array mit sieben Elementen. Darin stehen auch Woerter die doppelt vorkommen. Ich will dieses Array jetzt so umwandeln das jedes Wort nur ein mal vorkommt. 
Wie schaut des algorithmus dazu aus?
Kann mir jemand helfen?


----------



## Sky (8. Dez 2004)

Also entweder im Prinzip alles mit allem vergleichem und doppelte Elemente dann z.B. auf 'null' setzen oder du schiebst die Daten in einen anderen Datencontainer (z.B. ein anderes String-Array; noch besser sowas wie eine ArrayList oder einen Vector) schieben und vorher gucken, ob's schon mal drinne ist.


----------



## L-ectron-X (8. Dez 2004)

Entweder wie sky80 sagt alles mit allem vergleichen, oder wenn Du auf Objekte der Standard-API zurückgreifen willst/darfst/musst, kannst Du auch mit java.util.HashSet arbeiten.
Du fügst einfach jedes Element Deines Arrays einem HashSet-Objekt hinzu. Das HashSet kümmert sich von allein darum, dass es keine Duplikate gibt.


----------



## Pudelchen (13. Dez 2004)

So wie Sky80 gesagt hat so wollte ich es eigentlich machen, aber ich tu mir schwer mit verschachtelten Schleifen und verschiedenen Index. Mein noch falscher Code schaut so aus:

```
int probe=0;
                
              for(k=0;k<=6;k++){
              	for(x=0;x<=6;x++){
                   if(k!=x){
                     if(outer[k]==outer[x]){
                   	probe++;
                        }
                     } 
                 }     
                   newouter[k]=outer[k-probe];
              }
```
[/code]
Dabei ist outer das Array das gefiltert werden soll, und newouter dass arry wo dann nur noch einfach die Woerter drin stehen


----------



## bygones (13. Dez 2004)

das problem ist erstmal dass du nicht weißt wie groß outer sein soll ohne einmal vorher durchzulaufen. wenn du sie nur auf null setzen willst dann müsste deine Schleife so aussehen:

```
for ( int i = 0; i < s.length; i++ ) {
            for ( int j = i+1; j < s.length; j++ ) {
                if(s[i] == s[j]) {
                    s[j]=null;
                }
            }
        }
```
schöner finde ich L-ectron-X methode:

```
String[] s = new String[] { "H", "A", "H", "R", "T", "A", "F" };
         Set<String> set = new HashSet<String>(Arrays.asList(s));
```
hier werden wirklich alle duplicate gelöscht


----------



## Pudelchen (13. Dez 2004)

Die zweite Methode ist echt kuerzer und uebersichtlicher, aber ich kenn mich damit leider nicht aus. Deshalb kurz ein paar fragen:
wo steht dann mein gefiltertes Array drin? Immer noch in s? weil wenn das so waere dann koennte ich ja auch mit diesem Array weiter atbeiten, oder? und ich muss java.util.* importieren, oder?


----------



## bygones (13. Dez 2004)

in der zweiten Lösung arbeitest du nicht mehr mit dem Array, sondern mit dem Set (achja, anstatt HashSet kannst du auch TreeSet nehmen - dann sind die Element auch gfleich sortiert).

D.h. du kannst mit dem Set weiterarbeiten (man könnte auch das Set wieder in einen Array umwandeln).

Dafür müssten die Klassen java.util.Arrays, java.util.Set und java.util.HashSet (bzw. TreeSet) importiert werden


----------



## Pudelchen (13. Dez 2004)

Noch was wenn ich das so probiere bekommen ich eine Fehlermeldung:
Cap.java:50: '(' expected.
                Set<String> set = new HashSet<String>(Arrays.asList(outer)); 
Wo soll denn da noch ne klammer hin?


----------



## bygones (13. Dez 2004)

mit welcher Java Version arbeitest du ??
das beispiel geht nur mit Java1.5
ansonsten:

```
Set set = new HashSet(Arrays.asList(outer));
```


----------



## Pudelchen (13. Dez 2004)

Und das mit dem Array umwandeln. Was muss ich da dann tun? Also stehen dann meine Strings in Set?


----------



## bygones (13. Dez 2004)

im Set stehen dann die Strings: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Set.html mehr zu Set.

wenn es unbedingt ein Array wieder sein muss:

```
String[] s = (String[])set.toArray(new String[set.size()]);
```


----------



## Pudelchen (13. Dez 2004)

Vielen Dank, du hast mir vorerst mal super geholfen. Danke


----------

