# ArrayList mit einer Grösse definieren



## Malik (1. Dez 2010)

Hallo leute!

Ich hätte eine Frage....! zb:. wenn ich maximal 50 Kinder(objekte k1, k2...) verwaltet haben will .... wie stell ich das mit einer arrayList an? 

mit einer IF bedingung? --> und wenn ja im Hauptprogramm oder in die Klasse "Kind"

danke!


----------



## U2nt (1. Dez 2010)

Mit nem Array?
Oder muss es UNBEDINGT ne ArrayList sein? Weil ein Array wär hier echt logischer...


```
private Kind[] kinder = new Kind[50];
```


----------



## ARadauer (1. Dez 2010)

> mit einer IF bedingung?


ja, beim einfügen prüfst du wie viele schon drinnen sind...


----------



## z-mon (1. Dez 2010)

Du prüfst vor dem Einfügen neuer Kinder wie groß die Liste ist ...


```
ArrayList<String> list = new ArrayList<String>();
		
if(list.size() <= 50)
{
   list.add("Kalle");
}
```

Grüße


----------



## Malik (1. Dez 2010)

nehmen wir nun ein Auto Bsp her --> ich will hier nun, dass ich HIER nicht mehr als 50 Autos erzeugen kann! also maximal 50!

```
private static ArrayList<Auto> autos = new ArrayList<Auto>();


public Auto(int serienNr, String type, String farbe, int hoechstGeschwindigkeit){
		
this.serienNr = serienNr;
this.type = type;
this.farbe = farbe;
		
		
autos.add(this);
	}
```


----------



## U2nt (1. Dez 2010)

```
private static ArrayList<Auto> autos = new ArrayList<Auto>();

public Auto(int serienNr, String type, String farbe, int hoechstGeschwindigkeit){
  if(autos.size() < 50) {		
    this.serienNr = serienNr;
    this.type = type;
    this.farbe = farbe;
		
		
    autos.add(this);
  }
  // Evtl dann noch nen else Teil :D
}
```

So?


----------



## Malik (1. Dez 2010)

@U2nt.....ja so schaut das recht gut aus.....ich kann mir nun was darunter vorstellen, danke!  war mir nicht genau sicher wie ich das anstellen hätte sollen....dann werde ich in Zukunft, wenn eine Angabe auftaucht mit "max...." so machen!


----------



## Murray (1. Dez 2010)

Malik hat gesagt.:


> @U2nt.....ja so schaut das recht gut aus..


Ehrlich gesagt: nein, das tut es nicht! Was passiert denn, wenn die Grenze erreicht wird? Dann kann man Auto-Instanzen erzeugen, die nicht nur nicht in die Liste eingetragen worden sind, sondern bei denen nicht mal die Member initialisiert worden sind.

Also: wenn man so etwas überhaupt machen muss, dann müsste man wenigstens im else-Zweig eine Exception werfen, damit keine nicht-initialisierten Instanzen entstehen.


----------



## U2nt (1. Dez 2010)

Naja dafür hab ich ja noch das Kommentar in den Code reingeschrieben... mit dem else teil


----------



## nrg (1. Dez 2010)

suchst du vllt sowas in der Richtung?


```
import java.util.ArrayList;
import java.util.List;

public class AutoHaus {
	
	private List<Auto> autos;
	private int kapazitaet;

	public AutoHaus(int kapazitaet) {
		autos = new ArrayList<Auto>();
		this.kapazitaet = kapazitaet;
	}

	public boolean addAuto(Auto auto) {
		if (autos.size() >= kapazitaet)
			return false;
		
		autos.add(auto);
		return true;
	}
}
```


```
public class Auto {
	
	private int serienNr, hoechstGeschwindigkeit;
	private String type, farbe;
	
	public Auto(int serienNr, String type, String farbe, int hoechstGeschwindigkeit) {
		this.serienNr = serienNr;
	    this.type = type;
	    this.farbe = farbe;
	    this.hoechstGeschwindigkeit = hoechstGeschwindigkeit;
	}
	
	// Getter und Setter
}
```

Beispielsmain

```
public class Main {

	public static void main(String[] args) {
		AutoHaus audifeser = new AutoHaus(50);
		for (int i = 0; i < 60; i++) {
			if (audifeser.addAuto(new Auto(i+1, "Audi", "grün", 220))) {
				System.out.println("Auto Nummer " + (i+1) + " hinzugefügt");
			} else {
				System.out.println("Autohaus kann keine Autos mehr aufnehmen");
			}
		}
	}
}
```

edit: geht aber - wie Vorposter schon gesagt haben - genauso mit einem normalen Array. Die Frage ist, was du damit vorhast. Wenn das AutoHaus irgendwann expandieren soll, wäre eine ArrayList wohl besser. Wenn sich an der Größe nix tut, kannste ein Array nehmen.


----------

