1) l'ordre d'insertion de l'objet doit être conservé
Il s'agit de toute structure de données "normale" - array, arrayList, tree.Donc, évitez les structures de données auto-équilibrées ou auto-triées: des tas, des tables de hachage, ou des arbres en avant-plan (arbres splay, par exemple.) Ensuite, vous pouvez utiliser une de ces structures, mais alors vous devez garder suivi de son ordre d'insertion dans chaque noeud.
2) objet doit être unique (Ce sont objets de base de données qui sont uniquement identifiés par un UUID). Conserver un identifiant unique associé à chaque objet.
S'il s'agit d'un programme C, le pointeur vers ce nœud est unique (je suppose que cela s'applique également à Java). Si le pointeur du nœud n'est pas suffisant pour maintenir l'unicité, vous devez ajouter un champ à chaque nœud. vous garantissez d'avoir une valeur unique.
3) Si un objet plus récent avec le même ID est ajouté, l'ancienne version de l'objet devrait être sur-écrit/enlevé
Où voulez-vous placer le noeud? Voulez-vous remplacer le nœud existant? Ou voulez-vous supprimer l'ancien noeud, puis ajouter le nouveau à la fin? Ceci est important car il est lié à votre exigence # 1, où l'ordre d'insertion doit être préservé. 4) La solution doit être accessible par de nombreux threads. La seule façon de penser à cela est de mettre en place une sorte de verrouillage. Java vous permet d'entourer les strucutres et de coder dans un bloc synchronized
.
5) Lorsque le premier objet ajouté à la structure est lu/utilisé, il convient de retiré de la structure de données
peu comme une opération de "dequeue".
On dirait qu'une ArrayList est une très bonne option pour ceci: simplement à cause de # 5. Le seul problème est que les recherches sont linéaires. Mais si vous avez une quantité relativement faible de données, ce n'est pas vraiment un problème. Sinon, comme d'autres l'ont dit: une HashMap ou même une Tree fonctionnerait - mais cela dépendra de la fréquence des accès. (Par exemple, si l'élément "le plus récent" est le plus susceptible d'être accédé, j'utiliserais une structure linéaire.Mais si les accès seront des éléments "aléatoires", j'irais avec un HashMap ou un arbre.)
sont les objets accessibles dans l'ordre? ou au hasard? avec 3) vous voulez que la position des objets déplace l'objet inséré le plus récemment? – Cogsy