Creazione lista

di il
4 risposte

Creazione lista

Salve,
in Java Magazine ho trovato il seguente codice:

String[] arr = new String[] {"A1", "A2"};
List<String> listA = Arrays.asList(arr);
Se ho compreso correttamente si dice che listA e' una 'vista' sull'array arr e che dunque una modifica del tipo:
arr[1]="A3";

comporta anche che: listA=["A1", "A3"]

E' corretto dire che il riferimento della variabile listA e' una copia del riferimento della variabile arr, anziche' una 'vista' su arr ?

4 Risposte

  • Re: Creazione lista

    paolo.bertin ha scritto:


    Se ho compreso correttamente si dice che listA e' una 'vista' sull'array arr
    Sì, dal javadoc: "Returns a fixed-size list backed by the specified array."
    Ottieni un List i cui get/set vanno direttamente sugli elementi dell'array. E siccome è basata su quell'array specifico, la lista non è espandibile/ridimensionabile.

    paolo.bertin ha scritto:


    e che dunque una modifica del tipo:
    arr[1]="A3";

    comporta anche che: listA=["A1", "A3"]

    paolo.bertin ha scritto:


    E' corretto dire che il riferimento della variabile listA e' una copia del riferimento della variabile arr, anziche' una 'vista' su arr ?
    No, arr e listA fanno riferimento a due oggetti completamente differenti.
    La "relazione" è interna, al livello della implementazione di List che si tiene dentro il riferimento ad arr e lo usa come "storage" della lista.
  • Re: Creazione lista

    Possiamo allora dire che le due stringhe "A1" e "A2" sono condivise (e quindi memorizzate una volta sola) ?
  • Re: Creazione lista

    paolo.bertin ha scritto:


    Possiamo allora dire che le due stringhe "A1" e "A2" sono condivise (e quindi memorizzate una volta sola) ?
    Lo schemino sarebbe questo:
    arr ---------------------+
                             |     0   1
                  List       |   +---+---+
               +---------+   +-->|   |   |
    listA ---->|  E[] a--|------>|   |   |
               +---------+       +---+---+
                                   |   |
                                  /     \
                                 /       \
                               "A1"     "A2"
    In realtà è l'array ad essere "condiviso". Sia arr sia listA (internamente) hanno il riferimento allo stesso array. Quindi, di conseguenza, anche gli elementi dell'array sono in effetti condivisi.
  • Re: Creazione lista

    Ok, chiarissimo. Grazie
Devi accedere o registrarti per scrivere nel forum
4 risposte