Vector in ein Array umwandeln

Status
Nicht offen für weitere Antworten.

Pudelchen

Mitglied
koennte mir einer erklaeren wie ich einen Vector in ein Array umwandle?
Ich weiss irgendwas mit toArray() aber wie geht die Syntax genau?
 
toArray liefert nur einen Object[] zurück...
sagen wir du hast einen Vector mit Strings
Code:
String[] sA = (String[])vector.toArray(new String[vector.size()])

statt String dann einfach den Typ der im Vector sthet
 
Weils häufiger vorkommt, ein String-Beispiel:
Code:
String[] str = (String) myVector.toArray();
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Vector.html#toArray()

Edit: hehe dbac, der gleiche Grundgedanke. Wo das wohl her kommt... :wink:
 
@dbac: Hm, ich ich liebe die Collections, weil sie so mächtig sind und man jede Menge lernen kann.
Ich habe mich verhauen? Wo denn? Etwa bei den Array-Klammern?

@Student: 1.4er kein Problem aber ich tue mich etwas schwer mit der 1.5er Dokumentation.
Vielleicht kann mir das ja mal jemand klar machen:
API-Doc 1.5 hat gesagt.:
public <T> T[] toArray(T[] a)
 
siehe meinem Post. du musst der Methode den ArrayTyp mitgeben damit sie per Reflection den Array erstellen und dann mit den elementen füllen kann.

zu
Code:
public <T> T[] toArray(T[] a)
das ist eine generische Methode. T ist eine Typvariable. das <T> ist sozusagen: "Methode, achtung, eine Typvariable namens T wird hier benutzt". T kann eine beliebige Klass sein. D.h. man gibt der Methode einen Array vom Typ T (z.b. String) und er gibt dir dann den Typ als Array wieder zurück (gefüllt mir der Collection)...

d.h. ab 1.5 geht das dann auch so:
Code:
String[] ss = s.toArray(new String[s.size()]);
mit s = Collection....

verständlich ?
 
deathbyaclown hat gesagt.:
du musst der Methode den ArrayTyp mitgeben damit sie per Reflection den Array erstellen und dann mit den elementen füllen kann.
OK, Du benutzt die Methode
Code:
toArray(Object[] a)
Ich habe die
Code:
toArray()
benommen. Was ist daran falsch? Wird mit dieser Methode nicht auch wenigstens ein Object-Array erstellt?

Edit: Mist, habe gerade kein Editor und kein SDK zur Hand, sonst hätte ich es längst ausprobiert. :?
 
ja ein Object[] array - aber kein String Array !
Code:
String[] ss = s.toArray(new String[s.size()]);
Object[] oo = s.toArray();
ss = (String[])oo;
führt zu einer ClassCastException...
 
wegen des Erasure + Kompatibilität musst du ein Array vom richtigen Typ erst reinstecken
Code:
public <T> T[] toArray(T[] a)
das erste <T> ist der generische Typ T (gehört zu den Modifiern)
T[] ist der Rückgabetyp der Funktion und T[] a einfach das Argument

ein echter krampf, ich hätte mir auch gewünscht, dass eine
List<Birnen> eine einfache Birnen[] toArray(); haben würde; aber leider geht das wohl nicht...
 
Das mit dem umwandeln wuerde ja auch klappen. aber ich habschon wieder ein neues Problem mit diesem Vector zeug.
Also kurz mal hier der Code:
Code:
public void DateiLesen(Vector v)throws FileNotFoundException, IOException{
     
     File datei = new File("Parametertabelle.txt");
     leser = new FileReader(datei);
     int gelesenInt = 0;	
      
        String Zeichen;
        for(int i=0; i<100; i++){
    	Zeichen="";
        try{
        gelesenInt = leser.read();
        
        char gelesenChar = (char) gelesenInt;
        
     	while((gelesenChar!=' ')&&(gelesenChar!='\t')&&(gelesenChar!='\n')){
     	  	Zeichen=Zeichen+gelesenChar;
       		gelesenInt = leser.read();
       		gelesenChar = (char) gelesenInt; 
      		}
       } catch(IOException e){ e.printStackTrace();}
        v.addElement(Zeichen);
       
       
    	}               
}
Hier lese ich mein Woerter in den Vector, aber jetzt kommst:
Irgendwas mach ich falsch, denn hier wird diese Funktion aufgerufen:
Code:
public void init (){
        
              
                try{
        		DateiLesen(v);
                        System.out.println(v);
                }catch(IOException e){ e.printStackTrace();}
      
                String[] s = (String[])v.toArray(new String[v.size()]);
Aber er gibt mir den vector nicht mehr aus. Der Compiler meldet auch keinen Fehler. An was kann den das liegen?
 
das mit dem komischen toArray zeugs (ich stimme Bleiglanz zu) stammt daher weil REflections genutzt werden.

Code von toArray()
Code:
public Object[] toArray() {
	Object[] result = new Object[size];
	System.arraycopy(elementData, 0, result, 0, size);
	return result;
    }
und von toArray(T[])
Code:
public <T> T[] toArray(T[] a) {
        if (a.length < size)
            a = (T[])java.lang.reflect.Array.
		newInstance(a.getClass().getComponentType(), size);
	System.arraycopy(elementData, 0, a, 0, size);
        if (a.length > size)
            a[size] = null;
        return a;
    }

das ist ein generics problem - da man nicht
Code:
T[] tArray = new T[size];
machen kann
 
nur so zur info

wenn die List zufällig leer ist, also zu laufzeit kein einziges Element mehr enthält, dann gibt es real keine Möglichkeit, den Rückgabetyp zu ermitteln...
 
natürlich klappt das net - ich habe ja auch geschrieben, dass das eine Exception wirft !
 
Oh Oh, Jungs,
Ich gebs ja nur ungern zu aber das ist mir irgendwie ne Nummer zu hoch. Ich bin in Sachen Java noch gruen hinter den Ohren.
Kann mir jemand anfaengerfreundlich sagen wie ich denn nun den Verctor von der einen in die andere Funktion bekommen kann? und dann in der neuen Funktion in ein Array umwandle?
Bitte
 
Pudelchen hat gesagt.:
Oh Oh, Jungs,
Ich gebs ja nur ungern zu aber das ist mir irgendwie ne Nummer zu hoch. Ich bin in Sachen Java noch gruen hinter den Ohren.
Kann mir jemand anfaengerfreundlich sagen wie ich denn nun den Verctor von der einen in die andere Funktion bekommen kann? und dann in der neuen Funktion in ein Array umwandle?
Bitte
sry :wink:

in eine andere Funktion einfach über Parameter - oder versteh ich das falsch...
das umwandeln siehe meinen ersten Post mit dem String[] beispiel
 
Pudelchen hat gesagt.:
Hier lese ich mein Woerter in den Vector, aber jetzt kommst:
Irgendwas mach ich falsch, denn hier wird diese Funktion aufgerufen:
Code:
public void init (){
                String[] s = (String[])v.toArray(new String[v.size()]);
Aber er gibt mir den vector nicht mehr aus. Der Compiler meldet auch keinen Fehler. An was kann den das liegen?

das toArray sollte definitiv funktionieren?

bist du sicher, dass v das richtige v ist?

mach mal System.out.println(v.size())?

Bitte präzisiere "Aber er gibt mir den vector nicht mehr aus", was heisst das?
 
Hi!
deathbyaclown hat gesagt.:
ja ein Object[] array - aber kein String Array !
Code:
String[] ss = s.toArray(new String[s.size()]);
Object[] oo = s.toArray();
ss = (String[])oo;
führt zu einer ClassCastException...

Warum ist das eigentlich so?

Liebe Grüße
Reality
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben