# Array-Länge bei Erzeugung noch unbekannt - wie erzeugen?



## Guest (12. Jun 2006)

Hallo,

ich habe hier eine ziemliche Anfängerfrage:

Ich möchte einen Array erzeugen, in diesen dann bestimmte Werte einspeichern.
Jedoch weiß ich bei der Erzeugung noch nicht, wie viele Werte eingespeichert werden müssen, da dies erst beim Hinzufügen entschieden wird.

Wie kann ich den Array "dynamisch" machen, also dass sich die Länge anpasst, je nachdem wieviel hinzugefügt wird?

Außerdem möchte ich eben diese Länge des Arrays, die zu Beginn noch nicht feststeht auch später abfragen können, um die Anzahl der Elemente feststellen zu können.

Also zB

```
double[] array = new double[LÄNGE]
```

Die Länge weiß ich eben noch nicht, aber ohne sie, kann ich den Array irgendwie nicht erzeugen. 


Vielen Dank im Voraus!


----------



## AlArenal (12. Jun 2006)

..indem du kein Array nimmst (die Größe ist nach der Initialisierung nicht mehr änderbar), sondern irgendwas, was das Interface 'List' implementiert, z.B. Vector oder ArrayList.


----------



## Beni (12. Jun 2006)

Benutz eine java.util.ArrayList anstelle eines Arrays. Die Liste kann ihre Grösse dynamisch verändern, und so musst du nicht im voraus wissen, wieviel reinkommt.

_[Hmpf, zu langsam...]_


----------



## Wildcard (12. Jun 2006)

Es gibt zwei Möglichkeiten:
1. Die Länge des Arrays steht irgendwann fest:

```
double[] blupp;
....
```
blupp = new double[länge];
2. Die Länge des ändert sich im Programm, dann musst du eine Collection verwenden
z.B ArrayList

```
List<Double> blupp = new ArrayList<Double>();
list.add(1.2);
...
```

Die länge bei 1. kannst du mit 

```
blupp.length
```
auslesen, bei 2. mit

```
blupp.size();
```

EDIT: way too late


----------



## Guest (12. Jun 2006)

Vielen Dank für eure Antworten!

Also ich muss double-Werte abspeichern, also geht es mit Vektoren ja nicht.

Dieses ArrayList habe ich bisher nicht gekannt.

Kann ich das einfach wie einen Vektor verwenden?

Und kann ich darauf auch mit einem Laufindex zugreifen, wie bei array_ zB?_


----------



## AlArenal (12. Jun 2006)

Doch, kannst du. Ab Java 5 direkt und darunter mittels Wrapper-Klasse Double. Alles was du brauchst und mehr findest du über die Forum-Suche, oder per Google oder direkt in der API. Nur lesen musst dus schon selbst


----------



## L-ectron-X (12. Jun 2006)

Anonymous hat gesagt.:
			
		

> Also ich muss double-Werte abspeichern, also geht es mit Vektoren ja nicht.


Doch, das geht auch. Da ein Vector/ArrayList aber nur Objekte speichert, müssen die double-Werte vorher verpackt werden.

```
list.add(new Double(9.25));
```
Ab Java 1.5 kannst du sogar die double-Werte direkt übergeben, dort kümmert sich ein Feature namens Autoboxing um die automatische Verpackung.



			
				Anonymous hat gesagt.:
			
		

> Dieses ArrayList habe ich bisher nicht gekannt.
> 
> Kann ich das einfach wie einen Vektor verwenden?


Ja, ArrayList und Vector sind bis auf die Threadsicherheit (synchronized) identisch.



			
				Anonymous hat gesagt.:
			
		

> Und kann ich darauf auch mit einem Laufindex zugreifen, wie bei array_ zB?_


_


		Code:In die Zwischenablage kopieren


double d = ((Double)list.get(index)).doubleValue();

_


----------



## Guest (12. Jun 2006)

Habs jetzt meinen Code auf die Liste angepasst. 

Ein Problem tritt aber noch auf.

Meine Import-Statements sehen so aus:

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.text.*;
```

Und ich bekomme die Fehlermeldung beim Kompilieren:

```
reference to list is ambiguous, both class.java.util and class java.awt.List in java.awt match
```

Wie kann cih das beheben?

Dannn wäre ich (fast) wunschlos glücklich!


----------



## L-ectron-X (12. Jun 2006)

Tja, das ist eine kleine Schlamperei seitens Sun.
Man hat dort in zwei verschiedenen Packages eine Klasse mit gleichem Namen.
Es gibt eine Klasse List im awt- und im util-Package.
Das kannst du nur umgehen, in dem du die Klasse genau spezifizierst:

```
java.util.List list = new java.util.ArrayList();
```


----------



## AlArenal (12. Jun 2006)

Und wenn du du nur eine von beiden nutzt, hilft es die imports zu organisieren und nur das zu importieren, was man wirklich braucht. Dafür bieten diverse IDEs diverse Tastenkürzel und Menüpunkte an...

Ich sehe es meist eher als Schlamperei seitens des Programmierers


----------



## Guest (12. Jun 2006)

Danke L-ectron-X, so werd ich es machen.

Und AlArenal, ich benötige das andere Statement schon auch.


----------



## Wildcard (12. Jun 2006)

Das ist nur problematisch wenn du auch wirklich die java.util.List und die java.awt.List in einer Klasse verwenden willst.
Ansonsten kannst du diese Unschönheit wie AlArenal schon sagt mit genauen import Statements beseitigen
(Gott bin ich froh das IDEs das import Zeug alleine erledigen   )


----------



## byte (12. Jun 2006)

Ich bezweifel mal, dass Du alle Klassen aus java.awt verwendest.


----------

