Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152

    [Java] conversiona da collection a lista

    ciao a tutti
    sto facendo un esercizio mi viene data una Mappa<String , Libro> (ometto l implementazione di Libro poichè banale)

    fra i vari metodi offerti dalle mappe ho visto che c'è il .values() che ritorna una "Collection" dei valori.
    Corregetemi se sbaglio.
    una collezione è l interface che viene implementata da List e Set, dunque ho pensato di fare una conversione del tipo

    List<Libro> temp = ( List ) this.mappa.values();

    ho pensato che cosi potevo ottenere una lista di tutti quelli che sono i valori della mappa...
    è giusta la mia deduzione?


    grazie per la pazienza

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: [Java] conversiona da collection a lista

    Originariamente inviato da keykode20
    una collezione è l interface che viene implementata da List e Set
    Qui sbagli, Collection List e Set sono tutte e tre interfacce, in particolare List e Set sono figlie di Collection, come puoi vedere dalla documentazione.
    Le implementazioni sono classi non interfacce, e anch'esse puoi vederle nelle API.

    Se hai una Collection non puoi castarla a List, perché potrebbe non essere una lista (altrimenti il metodo tornerebbe una lista, no?). Se ti serve una lista devi passare per una classe che la implementi. Ad esempio se scegliessi ArrayList:

    codice:
    List<V> list = new ArrayList<>(collection);

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    ah ho capito!
    quindi se voglio passare da una collezione a una lista o set mi basta creare un nuovo oggetto che ha come prototipo la collezione passata!
    è possibile fare questa cosa sia per set e list?
    un altra domanda
    la collezione non è un super-tipo di List e Set ? almeno cosi avevo intuito dalla spiegazione sul libro!

    per l appunto sto ora notando che c'è un esempio che spiega:
    Set<V> tree = new TreeSet(Collection<? extends E>_c)

    sbaglio a dire che come parametro posso passare un qualsiasi sotto-tipo di Collection?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da keykode20
    ah ho capito!
    quindi se voglio passare da una collezione a una lista o set mi basta creare un nuovo oggetto che ha come prototipo la collezione passata!
    è possibile fare questa cosa sia per set e list?
    Prototipo? Parametro forse?

    La classe ArrayList (che implementa List) ha un costruttore che prende come parametro una Collection, ma questo non significa che lo debbano avere anche le altre implementazioni di List, devi guardare la documentazione delle classi che t'interessano.
    Le interfacce non possono definire costruttori, quindi il fatto che una classe implementi una qualche interfaccia non ti fornisce alcuna informazione sui costruttori della classe.

    Detto questo, probabilmente anche le altre classi delle librerie Java lo permettono. Ma ti ripeto, vai a leggere la documentazione, molte delle risposte alle tue domande sono lì.

    Originariamente inviato da keykode20
    un altra domanda
    la collezione non è un super-tipo di List e Set ? almeno cosi avevo intuito dalla spiegazione sul libro!

    per l appunto sto ora notando che c'è un esempio che spiega:
    Set<V> tree = new TreeSet(Collection<? extends E>_c)

    sbaglio a dire che come parametro posso passare un qualsiasi sotto-tipo di Collection?
    Si, Collection è super-interfaccia di List e Set.

    E ancora si, puoi farlo perché ogni oggetto il cui tipo è sotto-tipo di Collection, è anche un oggetto Collection (polimorfismo).

    Non mi pronuncio sui due tipi generici perché sono messi lì senza spiegazioni, ma occhio anche a quelli.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    si volevo dire parametro scusami
    lo farò... ma pensavo che fosse una particolarità di List e Set (e di tutti i sotto-tipi di collection) quello di avere in se un costruttore(che sia HashSet TreeSet ArrayList LinkedLisk ecc...) su cui posso passare parametri di tutti i sotto tipi di collection,
    è vero questo mio sospetto? è questo il motivo per cui sono cosi "potenti"? comunque andrò a vedere la documentazione sperando di ottenere le informazioni che cerco!
    grazie mille per le spiegazioni

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da keykode20
    si volevo dire parametro scusami
    lo farò... ma pensavo che fosse una particolarità di List e Set (e di tutti i sotto-tipi di collection) quello di avere in se un costruttore(che sia HashSet TreeSet ArrayList LinkedLisk ecc...) su cui posso passare parametri di tutti i sotto tipi di collection,
    è vero questo mio sospetto? è questo il motivo per cui sono cosi "potenti"? comunque andrò a vedere la documentazione sperando di ottenere le informazioni che cerco!
    grazie mille per le spiegazioni
    Dalla documentazione dell'interfaccia Collection:

    "All general-purpose Collection implementation classes (which typically implement Collection indirectly through one of its subinterfaces) should provide two "standard" constructors: a void (no arguments) constructor, which creates an empty collection, and a constructor with a single argument of type Collection, which creates a new collection with the same elements as its argument. In effect, the latter constructor allows the user to copy any collection, producing an equivalent collection of the desired implementation type. There is no way to enforce this convention (as interfaces cannot contain constructors) but all of the general-purpose Collection implementations in the Java platform libraries comply."

    Quindi si, ogni implementazione di Collection o una delle sue sotto-interfacce possiede un costruttore che prende come argomento una Collection.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.