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

    Copiare velocemente una matrice in un'altra

    Salve, in Java esiste un metodo per copiare velocemente una matrice in un'altra?
    Fin'ora ho utilizzato il metodo clone(), ma mi sono appena accorto che non copia i valori ma crea un'altra variabile che punta alla stessa matrice.
    E ciò è abbastanza strano poiché, al di là del metodo, per ottenere questo effetto basta fare matrice2 = matrice1;
    Comunque sia, come faccio a copiare solo i valori di una matrice in una nuova matrice, senza dover scorrere necessariamente le matrici?

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    I metodi copyOf e copyOfRange di Arrays
    http://docs.oracle.com/javase/7/docs...il/Arrays.html



    EDIT: Ah però i suddetti metodi sono per array, matrici monodimensionali, quindi in caso li dovresti adattare..

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da crissstian96 Visualizza il messaggio
    Fin'ora ho utilizzato il metodo clone(), ma mi sono appena accorto che non copia i valori ma crea un'altra variabile che punta alla stessa matrice.

    E ciò è abbastanza strano
    clone() sugli array clona (duplica) solo l'oggetto array su cui è invocato. Nel caso di array monodimensionali di oggetti o array multidimensionali (qualunque tipo) effettivamente fa una "shallow" copy. Ossia una copia in cui "qualcosa" è condiviso.
    Solo per gli array monodimensionali di primitivi, come caso particolare, il clone() fa una "deep" copy, ovvero una copia che è completamente distinta e senza nulla di condiviso.

    Quote Originariamente inviata da crissstian96 Visualizza il messaggio
    per ottenere questo effetto basta fare matrice2 = matrice1;
    No, così copi (duplichi) solo il reference alla matrice ... non duplichi la struttura della matrice! Una modifica attraverso matrice2 va ad alterare lo stesso oggetto puntato da matrice1.

    Quote Originariamente inviata da crissstian96 Visualizza il messaggio
    Comunque sia, come faccio a copiare solo i valori di una matrice in una nuova matrice, senza dover scorrere necessariamente le matrici?
    A meno di usare metodi di utilità appositi in librerie specifiche, devi farlo tu, con uno o più cicli a seconda della dimensionalità.
    Se l'array è bidimensionale, basta clonare l'array principale e poi fare un ciclo sull'array principale e fare clone() sui sotto-array.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da zipangulu Visualizza il messaggio
    I metodi copyOf e copyOfRange di Arrays
    http://docs.oracle.com/javase/7/docs...il/Arrays.html



    EDIT: Ah però i suddetti metodi sono per array, matrici monodimensionali, quindi in caso li dovresti adattare..
    Infatti non fanno una "deep" copy. E per gli array di oggetti al massimo duplicano l'array ... non gli oggetti referenziati.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Quote Originariamente inviata da andbin Visualizza il messaggio
    clone() sugli array clona (duplica) solo l'oggetto array su cui è invocato. Nel caso di array monodimensionali di oggetti o array multidimensionali (qualunque tipo) effettivamente fa una "shallow" copy. Ossia una copia in cui "qualcosa" è condiviso.
    Solo per gli array monodimensionali di primitivi, come caso particolare, il clone() fa una "deep" copy, ovvero una copia che è completamente distinta e senza nulla di condiviso.

    No, così copi (duplichi) solo il reference alla matrice ... non duplichi la struttura della matrice! Una modifica attraverso matrice2 va ad alterare lo stesso oggetto puntato da matrice1.

    A meno di usare metodi di utilità appositi in librerie specifiche, devi farlo tu, con uno o più cicli a seconda della dimensionalità.
    Se l'array è bidimensionale, basta clonare l'array principale e poi fare un ciclo sull'array principale e fare clone() sui sotto-array.
    Non lo sapevo, grazie mille ad entrambi

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.