Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726

    [JAVA] Trasformare da char[] a String e viceversa: tempo di esecuzione

    Ciao,
    vorrei sapere se la trasformazione da char[] a String e viceversa sono operazioni che vengono eseguite in tempo costante.

    Mi spiego: ho una stringa che deve essere spesso modificata (contiene un codice).
    Per modificare una stringa io la trasformo in un vettore di char, eseguo le modifiche e la ritrasformo in stringa.
    Per evitare questa doppia operazione mi stavo domandando se non fosse conveniente lavorare solo con un semplice vettore di char e poi al limite trasformarlo quando c'è necessità in stringa.

    Vedendo però che la classe String ha il metodo toCharArray, e dal momento che una stringa non è altro che un vettore di char camuffato, mi chiedevo se la trasformazione non si facesse in tempo costante, consentendomi cosi di usare una stringa che è sicuramente più pratica da usare senza comunque perdere tempo per una operazione alla fin fine non fondamentale.

    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Trasformare da char[] a String e viceversa: tempo di esecuzione

    Originariamente inviato da Downloader
    vorrei sapere se la trasformazione da char[] a String e viceversa sono operazioni che vengono eseguite in tempo costante.
    No, è proporzionato al numero di caratteri.
    Ed è vero che un String internamente ha poi semplicemente un char[] (più poco altro) ma String è immutabile, quindi lo stato interno di un String non deve essere accessibile/toccabile dall'esterno. E per tale motivo, se chiedi l'array di char[], viene istanziato un nuovo array e vengono copiati tutti i caratteri. E al contrario se crei un String da un char[] idem ... si crea un nuovo array char[] che si tiene internamente, copiando tutti i caratteri.

    Quindi è ovvio che non è tempo "costante" ... dipende dal numero di caratteri.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Ma secondo te, dal momento che io ho questo codice alfanumerico gestito come vettore di char, codice che può essere modificato un numero molto molto grande di volte, dal momento che una volta modificato il codice esso deve essere poi modificato in String per essere poi memorizzato in una certa struttura dati, la soluzione char[] può essere rimpiazzata con qualcosa di meglio in termini di efficienza?

    grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    up

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Downloader
    la soluzione char[] può essere rimpiazzata con qualcosa di meglio in termini di efficienza?
    Se la sequenza di caratteri non deve essere ridimensionabile (non devi togliere/aggiungere caratteri) e devi accedere velocemente ad un qualunque singolo carattere, no la soluzione più veloce è appunto un char[].
    Se devi poter ridurre/espandere la sequenza, meglio invece se usi StringBuffer o StringBuilder, che offrono molti metodi per inserire/aggiungere/togliere caratteri.

    Purtroppo non è molto chiaro cosa devi fare esattamente, quindi non saprei aiutarti più di tanto. Ti dico subito però che qualunque cosa intendi usare, sia char[] o StringBuffer o StringBuilder se alla fine devi ottenere un String viene comunque sempre fatta una copia dei caratteri che viene tenuta protetta dentro String. Da qui non si scappa ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.