Domanda

questo risposta ad una domanda ho chiesto. Kathy Van Pietra dice che l'aggiunta di una matrice in questo modo

jList1.setListData(LinkedHashMap.keySet().toArray());

è un modo migliore di farlo in questo modo

jList1.setListData(new Vector<String>(LinkedHashMap.keySet()));

Mi chiedo se ci fosse di vero in questa e in caso affermativo quale sia la ragione dietro di esso era.

È stato utile?

Soluzione

Avete bisogno la sincronizzazione offerto dalla classe Vector? Se no, allora non si vuole usare la classe Vector. (Se solo JList consentito utilizzando un ArrayList al suo posto.) Il costo della sincronizzazione uncontended è via inferiore nelle versioni JVM recenti, senso più basso di quanto non lo sia. Eppure, non c'è alcun motivo per utilizzare la sincronizzazione inutili.

Si presenta come Kathy Van pietra può riferirsi a che la sincronizzazione in più in Vector.

Nota attentamente il JavaDoc per public JList(Vector<?> listData) :

  

Il modello creato fa riferimento direttamente al vettore dato. I tentativi di modificare la   Vector dopo aver costruito i risultati della lista in un comportamento indefinito.

Purtroppo, il JavaDoc per public JList(Object[] listData) ha lo stesso avvertimento:

  

Il modello creato fa riferimento direttamente l'array data. I tentativi di modificare la   matrice dopo aver costruito i risultati dell'elenco comportamento indefinito.

Si deve decidere se c'è qualche probabilità che qualcuno decide che il Vector è utile più avanti con lo stesso metodo e modifica quindi il codice come questo:

Vector vec = new Vector<String>(LinkedHashMap.keySet());
jList1.setListData(vec);
// Other stuff with Vector
vec.add( .... ); // Adding some data type that fits in the Vector

... o, naturalmente, la stessa modifica con la versione di costruzione Array.

Altri suggerimenti

Date un'occhiata a realizzazione di entrambi i metodi setListData in classe JList e vedrete che in realtà non importa. Io preferirei la prima, semplicemente perché non v'è alcuna necessità di coinvolgere l'ennesima raccolta (Vector)

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