# Collection<Strings> - Liste von Strings verwalten



## Grapefruit (2. Nov 2008)

Ich habe eine Frage bekommen bei der mir etwas der Ansatz fehlt, vielleicht könntet ihr mir ein paar Denkanstösse geben. Ich weiß wie man mit einer ArrayList z.B. umgeht und so weiter nur was hier von mir gefragt ist verstehe ich nicht ganz.

Hier die Frage:

_Implementieren Sie die Klasse Namensliste. Sie soll eine Liste von Strings verwalten 
und für jede der folgenden Funktionalit¨aten eine Methode bereitstellen: 

• Hinzufügen von Strings zur Liste, 
• Entfernen von Strings aus der Liste, 
• Rückgabe der Anzahl an Strings in der Liste, 
• Prüfen, ob ein übergebener String in der Liste enthalten ist, 
• und Ausgeben aller in der Liste enthaltenen Strings auf der Konsole. 

Intern darf die Klasse lediglich ein Attribut des Typs Collection<String>, also ei- 
ne Sammlung von Strings speichern. Der Konstruktor der Klasse soll die Signatur 
Namensliste(Collection<String>) haben. Beim Konstruieren soll eine konkrete, noch 
leere Collection-Klasse übergeben und im Namensliste -Objekt gespeichert werden. 

Der Konstruktoraufruf in einem Textprogramm könnte also so aussehen: 
Namensliste n = new Namensliste(new Vector<String>()); 
Wobei Vector genauso wie PriorityQueue, ArrayList und viele Andere Klassen sind, 
die das Collection -Interface implementieren. _


----------



## Der Müde Joe (2. Nov 2008)

```
public class Names {

private Collection<String> names;

public Names(Collection<String> names) {
if(names == null){
throw new IllegalArgumentException("Cannot be null");
}
this.names = names;
}

public int size() {
return names.size();
}
```

• Hinzufügen von Strings zur Liste, --> Collection#add
• Entfernen von Strings aus der Liste, -->Collection#remove
• Rückgabe der Anzahl an Strings in der Liste, ---> Collection#size
• Prüfen, ob ein übergebener String in der Liste enthalten ist, --->Collection#contains
• und Ausgeben aller in der Liste enthaltenen Strings auf der Konsole. --->selber machen: for each System.out.println..


----------



## Grapefruit (2. Nov 2008)

vielen dank ) jetzt hab ich einen Ansatz und weiß worum es geht


----------



## Grapefruit (2. Nov 2008)

So sieht jetzt mein Code aus. Naja ich hab ja nicht mehr viel machen müssen copy & pasted  ... naja nur zum letzten wo alle enthaltenen Strings ausgegeben werden sollen bin ich mir nicht ganz sicher. Meine Variante funktioniert zwar aber es gibt bestimmt eine bessere Lösung mit einem return statement anstelle des system.out....
Wie konvertiere ich was mir der Iterator ausgibt in ein String?


```
...
        
            public void readout() { 
            Iterator it = namensliste.iterator();
            while (it.hasNext())
            {
                System.out.println(it.next());
            }
            
        }
}
```


----------



## Landei (2. Nov 2008)

> Wie konvertiere ich was mir der Iterator ausgibt in ein String?


So:

```
String s = (String) it.next();
```
Besser ist, gleich einen Iterator zu erzeugen, der Strings liefert:

```
Iterator<String> it = namensliste.iterator();
while (it.hasNext()) {
    String s = it.next();
    //tu was
}
```
Noch besser ist, ohne Iteratoren auszukommen:

```
for(String s : namensliste) {
   //tu was
}
```


----------



## Grapefruit (2. Nov 2008)

aber wie bekomme ich die Strings nacheinander aus der Collection ohne Iterator??


----------



## Landei (2. Nov 2008)

Im letzen Beispiel bekommt die Variable s automatisch bei jedem Durchlauf den nächsten String.


----------



## Grapefruit (2. Nov 2008)

Vielen Dank... mit eurer Hilfe habe ich es jetzt optimal hinbekommen


----------



## Der Müde Joe (2. Nov 2008)

> public void readout() { 

read = lesen
;-)

(write)


----------



## Grapefruit (3. Nov 2008)

readout war auf auslesen bezogen


----------

