Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    convertire Vector a double

    ho un Vector di double e al termine dovrei convertirli in un array di double..mi chiedevo se ci fosse un metodo più efficiente di questo che ho scritto

    codice:
    Vector<Double> outputCriteri=new Vector<Double>();
        //serie di azioni non interessanti
        double[] d=new double[outputCriteri.size()];
        for(i=0;i<outputCriteri.size();i++)
        {
            d[i]=outputCriteri.elementAt(i);
        }

    grazie a tutti!

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    34
    Dunque..se non erro c'e' il metodo toArray() che ritorna un array di Object, forse ancora piu' al caso tuo fa il metodo toArray(Object[] a), che ritorna un array di oggetti del tipo di quello passatogli.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    356
    esattamente come dice stefo_11 con un bel cast...

    codice:
    Double[] array = (Double[]) vector.toArray();
    Jekkil

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Jekkil
    esattamente come dice stefo_11 con un bel cast...

    codice:
    Double[] array = (Double[]) vector.toArray();
    No, sbagliatissimo!!!

    Il toArray() senza argomenti restituisce un array che è realmente un Object[], non un Double[]!!!
    Non sto parlando del contenuto, proprio dell'oggetto array che viene istanziato da quel toArray come Object[]. Il cast fallirebbe miseramente a runtime.

    Se si vuole che l'array sia "reificato" (cioè rappresentato a runtime) con il tipo Double, bisogna usare l'altro toArray, quello che riceve un array. Già ... perché l'unico modo per ottenere un array di un certo tipo dalla collezione è ... avere e passare già un array di quel tipo (e la collezione scopre il tipo dell'array tramite reflection)!
    E generalmente si passa un array "vuoto" o eventualmente della giusta dimensione.

    codice:
    Vector<Double> v;
    
    Double[] arr = v.toArray(new Double[0]);   // Modo 1
    
    Double[] arr = v.toArray(new Double[v.size()]);    // Modo 2
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Originariamente inviato da andbin
    No, sbagliatissimo!!!

    Il toArray() senza argomenti restituisce un array che è realmente un Object[], non un Double[]!!!
    Non sto parlando del contenuto, proprio dell'oggetto array che viene istanziato da quel toArray come Object[]. Il cast fallirebbe miseramente a runtime.

    Se si vuole che l'array sia "reificato" (cioè rappresentato a runtime) con il tipo Double, bisogna usare l'altro toArray, quello che riceve un array. Già ... perché l'unico modo per ottenere un array di un certo tipo dalla collezione è ... avere e passare già un array di quel tipo (e la collezione scopre il tipo dell'array tramite reflection)!
    E generalmente si passa un array "vuoto" o eventualmente della giusta dimensione.

    codice:
    Vector<Double> v;
    
    Double[] arr = v.toArray(new Double[0]);   // Modo 1
    
    Double[] arr = v.toArray(new Double[v.size()]);    // Modo 2
    in questo modo però avrò un array di Double invece che double..come posso risolvere?

  6. #6
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Non so se esiste un metodo di libreria... ma non puoi fare un ciclo sull'array di Double che ti va a riempire un array di double della stessa dimensione?
    Potrebbe anche non essere necessario in realtà, visto che una cosa tipo

    codice:
    Double[] d = new Double[] {1.0, 2.0};
    
    double dd = d[0] + d[1];
    è consentita. Dipende da cosa devi farci con quell'array

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da desa
    Non so se esiste un metodo di libreria...
    Nel framework di Java SE no. C'è la Commons Lang di Apache che ha un ArrayUtils con metodi appositi per questo (ma sarebbe comunque banale farlo da sé).

    Originariamente inviato da desa
    Dipende da cosa devi farci con quell'array
    Appunto. Perlomeno da Java 5 un Double è usabile dove richiesto un double (idem il contrario, idem per altri primitivi-wrapper).
    Anche pre Java 5 scrivendo ovviamente del codice in più.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    perfetto..ho risolto!

    grazie a tutti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.