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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top