2011-07-11 4 views
2

Je souhaite modifier les éléments de ArrayList et TreeSet simultanément.Comment partager des éléments entre ArrayList et TreeSet en Java?

Ex. Lorsque je modifie un élément de TreeSet, l'élément correspondant dans l'Arraylist est également modifié.

+2

Je ne sais pas pourquoi j'ai reçu une downvote. cela pourrait montrer que l'utilisateur ne comprend pas entièrement les références en Java, il ne mérite probablement pas un -1. –

Répondre

2

Tant que vous ajoutez le même objet aux deux, c'est exactement ce qui devrait arriver. (Ai-je manqué quelque chose?)

+0

ce n'est pas une réponse, devrait être un commentaire. -0 –

+1

Et en passant, votre réponse est fondamentalement dire exactement la même chose que le mien ... – aardvarkk

+0

@ahmet Mieux vaut signaler une réponse comme "pas une réponse" si c'est le cas. Incidemment, je pense que ceci * est * une réponse, quoique un one-liner. – razlebe

2

En Java, les objets dans les collections sont stockés avec leurs références. Par conséquent, si vous modifiez un objet, il sera mis à jour partout où il est référencé. Tu ne devrais pas te préoccuper de ça.

Pour utiliser à la fois, vous devez synchroniser la mise en œuvre d'une nouvelle classe, voici le modèle:

class MyCollection{ 
    private TreeSet treeSet; 
    private ArrayList arrayList; 

    public synchronized void add(Object o){ 
     treeSet.add(o); 
     arrayList.add(o); 
    } 
} 

choses que je considérais comme ci-dessus:

  • collections intérieures gardé principe privé, moindre privilège. Mot clé pour fournir une simultanéité multithread cohérente.

choses que je ne l'ai pas considéré ci-dessus:

  • types génériques
  • méthode add devrait revenir boolean comme tous java Collection s font.

Vous devez implémenter votre propre code pour une meilleure solution, mais généralement, c'est l'idée.

EDIT: Une autre solution est d'écrire vos propres emballages TreeSet et ArrayList (qui utilise TreeSet et Arraylist dessous) et quand quelque chose est ajouté, puisque vous remplacer cette méthode add(), vous pouvez ajouter l'autre chose. Mais ce n'est pas une pratique de couplage lâche. Il y a peut-être une autre solution avec Observer Framework.

Questions connexes