Il y a peut-être un nom pour ce que je veux, mais je n'en suis pas conscient. J'ai besoin de quelque chose de similaire à un LinkedHashMap
en Java, mais où il renvoie la valeur «précédente» s'il n'y a pas de valeur à la clé spécifiée.
Autrement dit, j'ai une liste d'objets stockés par une clé entière (qui est en unités de temps dans mon cas):
; key->value
10->A
15->B
20->C
Donc, si je demandais une valeur pour la clé 0-9, elle reviendrait null
. La partie spéciale est que si je demandais quelque chose 10 <= i <= 14 cela retournerait A. Ou, pour i> = 20, cela retournerait C.
Existe-t-il une structure de données pour cela?
java
data-structures
Entaille
la source
la source
Réponses:
Vous recherchez une carte navigable . Il s'agit d'un sous-type de SortedMap qui a également certaines fonctions disponibles en plus de la nature de la carte en cours de tri. Notez que la carte navigable "est destinée à remplacer l'interface SortedMap." ( Améliorations de Java SE 6 Collections Framework ). Tout ce qui met en œuvre actuellement des
SortedMap
outilsNavigableMap
et cela est susceptible de rester vrai.En particulier, la méthode
floorKey(K key)
qui "renvoie la plus grande clé inférieure ou égale à la clé donnée, ou null s'il n'y a pas une telle clé.Ce n'est là qu'une des nombreuses méthodes qui vous permettent d'obtenir des clés ou des sous-plans spécifiques de la carte.
Java a deux implémentations de NavigableMap - TreeMap et ConcurrentSkipListMap .
Si vous regardez l'idée / l'implémentation d'une liste de sauts, vous verrez pourquoi cela fonctionnerait très bien avec une telle structure et ses requêtes.
la source
LinkedHashMap
celui qu'il mentionne. NiTreeMap
ni neConcurrentSkipListMap
sont ordonnés par le temps d'insertion commeLinkedHashMap
, ils sont plutôt ordonnés par unComparator
ou l'ordre naturel de la clé s'ils implémententComparable
.Ce que vous recherchez est une table de symboles qui prend en charge les opérations ordonnées. Et dans votre cas, c'est l'opération au sol.
L'implémentation de hachage d'une table de symboles est la plus rapide, mais elle n'offre pas ces opérations ordonnées.
Mais l'implémentation arborescente des tables de symboles le fait. Un exemple de cela en Java est la classe TreeMap
la source