Come avere variabili con tipi di dati dinamici in Java?
-
04-10-2019 - |
Domanda
Ho bisogno di avere una classe UserProfile
che è solo che, un profilo utente. Questo profilo utente ha alcuni dati degli utenti vitali del corso, ma ha anche bisogno di avere liste dei messaggi inviati dagli amici degli utenti.
Ho bisogno di salvare questi messaggi in LinkedList
, ArrayList
, HashMap
e TreeMap
. Ma solo uno alla volta e non duplicare il messaggio per ogni struttura di dati. In sostanza, qualcosa di simile a un tipo di variabile dinamico, in cui ho potuto scegliere il tipo di dati per i messaggi.
E 'questo, in qualche modo, possibile in Java? O il mio approccio migliore è qualcosa di come questo ? Cioè, ho 2 classi diverse (per il profilo utente), una dove ho ospitare i messaggi come Map<K,V>
(e poi uso HashMap
e TreeMap
dove appropriato) e un'altra classe dove ho ospitare come List<E>
(e poi uso LinkedList
e ArrayList
dove appropriato). E probabilmente utilizzare una classe di super per l'UserProfile
quindi non ho duplicare variabili e metodi per i campi come i dati, età, indirizzo, ecc ...
Qualche idea?
Soluzione 3
Ho finito per usare quello che ho descritto sul primo palo:
E 'questo, in qualche modo, possibile in Java? O il mio approccio migliore è qualcosa di simile Questo? Voglio dire, ho 2 classi diverse (Per il profilo utente), quella in cui ho ospiterà i messaggi come mappa (e allora io uso HashMap TreeMap e dove opportunamente) e un'altra classe dove Io li ospitano come elenco (e poi io uso LinkedList ArrayList e dove appropriatamente). E probabilmente utilizzare un super classe per la ProfiloUtente così ho non c'è bisogno di duplicare variabili e metodi per i campi come i dati, l'età, indirizzo, ecc ...
Altri suggerimenti
Prima di tutto, voi non sono duplicazione di un messaggio aggiungendo a collezioni diverse, allo stesso tempo - avete solo memorizzare distinti riferimenti per lo stesso oggetto. (Beh, a meno che un messaggio viene rappresentato come un tipo primitivo come long
... ma questi non può essere aggiunto alle collezioni in ogni caso).
Perché non puoi avere tutte quelle raccolte all'interno della stessa ProfiloUtente? Ciò consentirebbe di accedere ai messaggi di chiave o un indice, e iterare attraverso di loro in qualsiasi modo vi piace.
Un LinkedHashMap forza anche essere un'opzione interessante per voi, in quanto garantisce l'iterazione ordine, quindi in un certo senso si comporta in modo simile a un elenco per quanto riguarda iterazione, pur essendo una mappa. In ultima analisi, si riduce a come si desidera accedere ai messaggi di un determinato utente, che non avete dettagliato.
Aggiornamento: @Snake, è possibile memorizzare solo riferimenti a oggetti di collezioni di Java. Un valore long
primitivo pertanto non può essere memorizzato direttamente, solo convertendosi in oggetto Long
prima. Nota che, dal momento Java5, questa conversione può essere implicita a causa di autoboxing, in modo da non lo vedi nel codice, ma succede ancora, tuttavia, -. Per esempio
List<Long> list = new ArrayList<Long>();
list.add(1L); // the primitive value is boxed into a Long object,
// which is then added to the list
long value = list.get(0); // the value of the Long object in the list is outboxed
// and assigned to the primitive variable
Se questo è un progetto universitario, quindi ho il sospetto che quello che sono destinati a fare è questa:
Collection mycoll;
mycoll = new ArrayList();
for (Message m:message) {
// do stuff and measure the performance
}
// do other stuff and measure the performance
mycoll = new LinkedList();
// do the same stuff as a above and measure the performance again
mycoll = new HashMap();
//... and so on
Come già detto, l'aggiunta di un oggetto in una collezione non duplicarlo.