# Zugriff auf Array-Liste



## DieDreiJavas (5. Mrz 2012)

Hallo!
Wir haben folgende Frage:
Wir wollen einen Cocktail-Rezept-Manager erstellen. Dieser soll folgende Funktionen zur Verfügung stellen: Rezept ansehen, editieren, löschen. Wir haben überlegt, das mit einer ArrayList zu realisieren. Dabei würde dann jedes Listenelement für einen Cocktail stehen. Die Frage ist nur, wie man dann auf die einzelnen Elemente zugreifen kann, um z.B. Zutaten direkt in dem Element abzuspeichern bzw. dem Element zuzuweisen.???:L
Vielen Dank schonmal


----------



## ARadauer (5. Mrz 2012)

mit get


----------



## x22 (5. Mrz 2012)

Kannst auch mit ner erweiterte for-Schleife durchlaufen und mit ner if-Abfrage rausfiltern.
Post mal deinen Code hier rein..


----------



## DieDreiJavas (5. Mrz 2012)

Wir haben uns das so gedacht:

```
// Liste erzeugen

List<String> liste = new ArrayList<String>();
liste.add ("SexOnTheBeach");
liste.add("Caipi");
system.out.println (liste);
```
___________________________________________________________

WIe wir Objekte ewinfügen und entfernen wissen wir. 
Das Problem besteht jetzt darin, dass wir keine Ahnung haben wiw wir auf die einzelnen Objekte zugreifen können, bzw den einzelenen Objekten noch Attribute(Zutaten der Cocktails) zuweisen können.

Sprich ein Cocktail besteht aus verschiedenen ZUtaten und diese möchten wir jedem einzelenen noch zuweisen, so dass automatisch nach Aufruf des Objekts aus der Liste ( also dem Cocktail) die Zutaten die wir dem Cocktail zuweisen wollen ebenfalls mit aufgerufen werden.


----------



## faetzminator (5. Mrz 2012)

Aber Achtung, wenn du mit einer erweiterten for-Schleife (auch for-each genannt) eine durch eine Liste iterierst, wird im Hintergrund ein Iterator verwendet. Solange man mit einem Iterator über eine Liste iteriert, kann diese nicht (bzw. nur durch den Iterator) angepasst werden.
Somit kannst du zumindest im delete Case (wenn du irgendwas suchen willst) keine for-each Schleife verwenden.


----------



## Michael... (5. Mrz 2012)

Eine List mit String ist in dem Fall ja sinnfrei. Definiert doch eine Klasse Cocktail, die alle Zutaten und Eigenschaften eines Cocktails verwalten kann und arbeitet mit einer 
	
	
	
	





```
List<Cocktail> cocktailList
```


----------



## DieDreiJavas (5. Mrz 2012)

Also wäre es sinnvoll in diesem Fall eine KLasse "Cocktails" zu erstellen. In dieser Klasse erstellen wir dann Objekte welche zum Beispiel "Sex On The Beach", "Caipi" , etc. heissen. Diesen Objekten geben wir dann die verschiedenen Attribute wie Zutaten und Mengen und Zubereitung.
Nur wie kann man dann auf die jeweiligen Objekte zugreifen, um die Attribute einzugeben? Also nicht die Liste durchlaufen, sondern halt z.B. gezielt nach einem Objekt (z.B. "Caipi") suchen, um es zu editieren?
Oder ist das Ganze überhaupt so möglich Oo???


----------



## faetzminator (5. Mrz 2012)

Du kannst eine [c]Map<String, Cocktail>[/c] erstellen, damit kannst du in Laufzeit [c]O(1)[/c] dann auf ein beliebiges Objekt zugreifen, sofern du den Key (den String) hast.


----------



## Moon93 (5. Mrz 2012)

Hallo Zusammen,

auch ich rate dazu eine eigene Klasse Cocktail zu erstellen.
Aber das wurde ja bereits gesagt.

Meine Frage wäre, wieso du denn unbedingt direkt auf das Element zugreifen willst.
Wenn du die Cocktail-Elemente in einer Linearen Liste verwaltest, kannst du doch auch jedes Element durchsuchen.

Natürlich ist die Laufzeit nicht optimal, aber ich glaube das ist bei euren Datensätzen nicht wirklich ein Problem.
Ist so meiner Meinung nach einfacher zu implementieren.

Gruß Moon93


----------



## x22 (5. Mrz 2012)

Achtung: Über eine Map kannst du dann nichtmehr iterieren. Ist klar sinnvoller eine neue Klasse zu erstellen, dann kannst du direkt auf n value zugreifen. Ist wohl einfacher.

[EDIT]*einfach iterieren..[/EDIT]

Regards,


----------



## Marcinek (5. Mrz 2012)

x22 hat gesagt.:


> Achtung: Über eine Map kannst du dann nichtmehr iterieren. Ist klar sinnvoller eine neue Klasse zu erstellen, dann kannst du direkt auf n value zugreifen. Ist wohl einfacher.
> 
> Regards,



Klar geht das.

Man kann über Keys, Values oder Entrys iterieren.


----------



## ARadauer (5. Mrz 2012)

x22 hat gesagt.:


> Achtung: Über eine Map kannst du dann nichtmehr iterieren.



klar...


```
Map<String, Rezept> map = new HashMap<String, Rezept>();
		for(Rezept rezept : map.values()){
			
		}
```


----------



## x22 (5. Mrz 2012)

ARadauer hat gesagt.:


> klar...
> 
> 
> ```
> ...




Ich meinte allgemein iterieren, wenn man .values() angibt geht das, vergisst er das geht es nicht.
(Wenn man nur den Namen der map angibt)


----------



## Marcinek (5. Mrz 2012)

x22 hat gesagt.:


> Ich meinte allgemein iterieren, wenn man .values() angibt geht das, vergisst er das geht es nicht.
> (Wenn man nur den Namen der map angibt)



Aha :autsch:

Wenn ich vergesse das Array anzugeben, dann kann ich auch nicht drüber iterieren.

Außerdem bekommt man das schon zur compilezeit einen Error?


----------



## x22 (5. Mrz 2012)

Marcinek hat gesagt.:


> Aha :autsch:
> 
> Wenn ich vergesse das Array anzugeben, dann kann ich auch nicht drüber iterieren.
> 
> Außerdem bekommt man das schon zur compilezeit einen Error?



Es geht grade aber um den allgemeinen Aufbau einer erweiterten for Schleife, wenn du den wie bei einer ArrayList verfolgst geht das nicht, das Einzige auf was ich mit meinem Post aufmerksam machen wollte. 

Wenn du den Klassennamen weglässt funkt. das auch nicht.. sinnloser Post.


----------



## faetzminator (5. Mrz 2012)

@x22, wenn du nicht über Maps iterieren willst, wiel sie Iterable nicht implementieren, dann mach doch einfach du das für deine Maps und delegier alle Methoden an [c]values()[/c]


----------



## ARadauer (5. Mrz 2012)

ich glaube wir kommen vom thema ab....


----------



## vanny (5. Mrz 2012)

Genau, zurück zum Thema

wenn du Dir deine eigene Cocktail-Klasse erstellst, kannst du den Key/Namen ja per Konstruktor zuweisen.


```
cocktailListe.add(new Cocktail("Caipi", "Zutat1", "Zutat2",..was auch immer));
```

dann verpasst du deiner Cocktailklasse eine Methode, die den gesuchten Namen abgleicht


```
public boolean isTheRightOne(String name){
if(this.name.equals(name)){
return true;
}else{
return false;
}
}
```

dann kannst du einfach über deine cocktailListe iterieren und bekommst von dem Passenden CocktailObjekt bescheid wenn es das entsprechende ist.

Gruß Vanny


----------



## x22 (6. Mrz 2012)

ARadauer hat gesagt.:


> ich glaube wir kommen vom thema ab....



joa.. ich mag das nur nicht, wenn Leute..*hust*..ein Post über meinem.. gleich mit so komischen Beispielen kommen und sofort was zu kritisieren haben, aber nichts zum Thema direkt.
Hab nur n Hinweis gegeben, mehr nicht. Da sollte man nicht jedes Wort in einzelne Buchstaben zerlegen und diese durchleuchten nur um seine Postanzahl zu erhöhen.

War nicht meine Intension, von Thema abzuweichen.

@faetzminator: Ich lass das einfach in ner ArrayList stehen 

Und jetzt zurück zum Thema.
Pseudo-Code wie sowas auszusehen hat:


```
public class Article {
	
	int preis;
	String description;
	
	
	public Article(int preis, String description) {
		super();
		this.preis = preis;
		this.description = description;
	}
...
```


Test-Klasse:


```
public class TestArticel {

public static void main(String[] args){
	
	ArrayList<Article> list1= new ArrayList<Article>(5);
	Article art1= new Article(500, "TV");
	Article art2= new Article(50, "Radio");
	Article art3= new Article(100, "Kaffeemaschine");
	Article art4= new Article(300, "Handy");
	Article art5= new Article(600, "Krahn");
		
	list1.add(art1);
	list1.add(art2);
	list1.add(art3);
	list1.add(art4);
	list1.add(art5);
	
	getList(list1);

 }

	public static void getList(ArrayList<Article> list1){
		for(Article article: list1){
			System.out.println(article.getPreis());
			System.out.println(article.getDescription());
		}
	}
```

So brauchst keine Map, lässt es einfach in der ArrayList drin, auf dein Beispiel anpassen, Fertig.:toll:
Regards,


----------



## Frischling (6. Mrz 2012)

ich habe das mal nachprogrammiert mit den Cocktails und bei mir funktioniert das richtig gut, obwohl ich noch nicht lange dabei bin!
Danke x22.:applaus:


Grüße Frischling


----------

