Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: generics

  1. #1

    generics

    come può questo codice dare questo risultato con il trattino?

    OwnGeneric<String> own = new OwnGeneric<String>();
    for (int i = 0; i < 10; ++i) {
    own.add(""+(i));
    }
    System.out.println(own);

    output:
    0-1-2-3-4-5-6-7-8-9

    al posto del trattino non dovrebbe esserci uno spazio vuoto?

  2. #2
    Bisogna vedere come e se è stato riscritto il metodo toString nella classe OwnGeneric

  3. #3
    public class OwnGeneric<E>
    private List<E> list;
    public OwnGeneric () {
    list = new ArrayList<E>();
    }
    public void add (E e) {
    list.add(e);
    }
    public void remove (int i) {
    list.remove(i);
    }
    public E get(int i) {
    return list.get (i);
    }
    public int size() {
    return list.size();
    }
    public boolean isEmpty () {
    return list.size() == 0;
    }
    public String toString(){
    StringBuilder sb = new Stringbuilder();
    int size = size();
    for (int i = 0; i < size; i++) {
    sb.append (get(i) +(i != size -1 ? "-" : ""));
    }
    return sb.toString();
    }
    }

    ed il toString() ?

  4. #4
    come puoi vedere nel toString viene concatenato il contenuto della lista con il "-"

  5. #5
    quindi il return sb.toString(); genera questo risultato?
    però avendo scritto toString() Restituisce un oggetto String che rappresenta il valore giusto? quindi di tipo stringa... che senso ha?

  6. #6
    codice:
    for (int i = 0; i < size; i++) {
    sb.append (get(i) +(i != size -1 ? "-" : ""));
    }
    Il risultato di avere il trattino tra ogni elemento della lista lo genera questo codice non sb.toString.
    Il fatto che nel metodo toString venga usato un oggetto di tipo StringBuilder (e direi anche meno male) viene fatto perchè in java le stringhe sono oggetti immutabili quindi effettuando una concatenazione tra 2 stringhe ("-" + elemento lista) ne nascerebbe una nuova con ovviamente spreco di memoria (oltre al fatto che se usi quel codice con una lista di 10000 risultati avresti molti problemi di performance). Spero di aver inteso il tuo dubbio.

  7. #7
    quindi Stringbuilder serve per concatenare ed eseguire altre azioni con le stringhe in modo tale da non occupare altro spazio in memoria?
    ok...inoltre si restituisce un tipo stringa proprio appunto perchè la stringa è immutabile? se farei restituire un int poi non potrei utilizzare un oggetto di tipo Stringbuilder e quindi andrei a sprecare maggiore memoria giusto? dico bene?

  8. #8
    Quote Originariamente inviata da francesco51 Visualizza il messaggio
    quindi Stringbuilder serve per concatenare ed eseguire altre azioni con le stringhe in modo tale da non occupare altro spazio in memoria?
    Diciamo di si.
    Quote Originariamente inviata da francesco51 Visualizza il messaggio
    ok...inoltre si restituisce un tipo stringa proprio appunto perchè la stringa è immutabile?
    No perchè il toString prevede come tipo di ritorno una stringa.
    Quote Originariamente inviata da francesco51 Visualizza il messaggio
    se farei restituire un int poi non potrei utilizzare un oggetto di tipo Stringbuilder e quindi andrei a sprecare maggiore memoria giusto? dico bene?
    Non potresti usare uno stringBuilder perchè esso prevede appunto di lavorare con le stringhe non con gli interi (anche se non ho capito da dove salta fuori questo intero)

  9. #9
    Non potresti usare uno stringBuilder perchè esso prevede appunto di lavorare con le stringhe non con gli interi (anche se non ho capito da dove salta fuori questo intero)[/QUOTE]

    più che altro è un mio chiarimento... non salta fuori da niente

    ti ringrazio... un pò più chiaro lo è...ma devo ancra vederlo meglio

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da francesco51 Visualizza il messaggio
    ma devo ancra vederlo meglio
    Il toString() è di Object ed è ridefinibile in sotto-classi. Serve solo per chiedere all'oggetto di fornire una sua "descrizione". Questa descrizione generalmente è abbastanza "tecnica" ma a seconda del tipo di oggetto può anche essere usata per mostrarla all'utente finale.
    Per generare la stringa di descrizione puoi usare quello che vuoi, ma ovviamente dipende anche da come è fatta la classe e da cosa vuoi descrivere.
    Il toString() di java.awt.Rectangle ad esempio fa così:

    codice:
    public String toString() {
        return getClass().getName() + "[x=" + x + ",y=" + y + ",width=" + width + ",height=" + height + "]";
    }

    Il toString() di ArrayList invece è ben più complesso e usa anche StringBuilder.
    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.