Java: La collection triée qui permet les doublons, est efficace en mémoire et fournit une insertion rapide et une mise à jour rapide

Plus précisément j'ai besoin d'une collection qui utilise un champ pour Un accès et un autre (champ S) pour le tri, mais une collection triée qui accepte le double serait suffisant.

Je viens souvent à ce moment-là que j'ai besoin exactement cette collection et TreeMap est pas une option, car elle ne permet pas de doublons. Alors maintenant, il est temps de se demander ici. Il existe plusieurs solutions comme l'a souligné sur stackoverflow ici et ici - à savoir il y a:

  • PriorityQueue: mise à jour lente (remove(Object) + ajouter(Objet)), et de la boxe de la primitive clés
  • Tas de Fibonacci: de la mémoire des déchets (?)
  • TreeMap<Field_S, List<Value>>: problème pour moi, c'est la surcharge de la mémoire de la liste, et de la boxe de la primitive clés
  • triés liste ou d'une matrice: le problème est la lenteur insérer et à retirer -> dois-je mettre en œuvre un segmenté liste triée?
  • TreeMultimap de goyave (docs): dépendance externe et probablement de la mémoire inefficace (?)

Quelqu'un avec de meilleures suggestions? Ou devrais-je rôle de ma propre triés discbased (laquelle?)? Aussi d'autres sources (en Java, open source, avec des tests unitaires et de petites deps), ce serait bien.


Mise à jour

Plus de détails sur mon cas d'utilisation à l'instant (même si je vais avoir une demande similaire à la dernière fois). J'ai une collection (avec des millions) de références où je veux être en mesure

  • d'un sondage ou d'obtenir le plus petit élément de S
  • et mise à jour de champ à l'aide d'Un champ
  • des valeurs identiques de terrain peuvent se produire. champ est en fait un entier pointant vers un autre tableau
  • la seule dépendance je veux, c'est trove4j. Je pourrais utiliser un autre comme le mahout collections, si c'est nécessaire. Mais pas de goyave en tant que bien que d'une belle lib, les collections ne sont pas à l'écoute pour être efficace en terme de mémoire (boxing/unboxing).

Donc tous les cris d'un tas de fibonacci, mais j'ai peur qu'il a trop de frais généraux par element -> c'est la raison j'ai pensé à un plus efficace en terme de mémoire "triés+sectorielle tableau" solution.

source d'informationauteur Karussell