2015-07-24 7 views
5

Ho un oggetto DTO utilizzato per ottenere dati dal mio server. Può essere usato per uno o più elementi. Questo DTO incapsula un Collection contenente i dati.Cosa posso memorizzare un singolo elemento in una raccolta?

Quando il mio DTO mi porta un solo elemento, come dovrei memorizzarlo?

codice di esempio:

public class DataDTO implements Serializable 
{ 
    private Collection<Data> data; 

    public DataDTO() 
    { 
    } 

    public Collection<Data> getData() 
    { 
     return data; 
    } 


    public void setData(Collection<Data> data) 
    { 
     this.data = data; 
    } 


    public void setData(Data singleData) 
    { 
     // At this time I use an ArrayList initialized with a capacity of 1 
     this.data = new ArrayList<Data>(1); 
     this.data.add(singleData); 
    } 
} 
+0

Che dire dell'utilizzo di 'Array'? – Arpit

+0

Un elemento non è una collezione: P –

+0

So che un elemento non è una raccolta, ma non voglio aggiungere un oggetto DTO speciale solo per il caso in cui ho un solo elemento ^^ – Sara

risposta

14

È possibile utilizzare i metodi singleton dalla classe Collezioni.

singletonList: restituisce un elenco immutabile contenente solo l'oggetto specificato. L'elenco restituito è serializzabile.

singleton: restituisce un set immutabile contenente solo l'oggetto specificato. Il set restituito è serializzabile.

singletonMappa: restituisce una mappa immutabile, mappando solo la chiave specificata sul valore specificato. La mappa restituita è serializzabile.

+0

Quali sono le differenze in termini di spazio e prestazioni della memoria? – Sara

+1

@Sara assolutamente nessuno. Dai un'occhiata al [codice sorgente] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/Collections.java?av=f) - le classi 'singletonXXX' sono semplici adattatori a diversi tipi di' interface' - ne selezioni uno in base al fatto se vuoi usare l'API 'Set' o l'API' List' - 'Map' non è ovviamente una' Collection'. –

5

La domanda è: cosa vuoi fare in seguito con esso? C'è una possibilità che tu possa aggiungere un altro elemento? In caso contrario, è possibile utilizzare

this.data = Collections.singletonList(singleData);

Se c'è una possibilità che si potrebbe desiderare di aggiungere elementi in seguito, allora è la domanda tipica cosa implementazione List da utilizzare, ArrayList va bene per molti casi.

+0

Oppure 'Collections.singleton' per lo stesso effetto. –