2
votes

Structure de données pour la liste liée

Quelle est la meilleure façon de conserver une liste d'éléments triables et consultables? Je veux avoir une liste d'indications de médicaments que je veux garder dans l'ordre comme ceci:

Médicaments --------- Indication

lisinopril --------- hypertension

bésylate d'amlodipine --------- hypertension

bésylate d'amlodipine --------- maladie coronarienne (CAD)

carvédilol --------- hypertension

ciprofloxacine --------- infections de la peau et des structures cutanées

ciprofloxacine --------- infections des os et des articulations

Quel que soit l'ordre, le bésylate d'amlodipine doit correspondre à l'hypertension. J'ai besoin de pouvoir trier par ordre alphabétique. Ensuite, j'ai besoin de pouvoir obtenir des sous-ensembles. Je dois donc être en mesure d'extraire les indications pour, par exemple, la ciprofloxacine et le lisinopril, puis de chercher pour voir si l'hypertension est dans cette liste résultante.

Comment puis-je faire cela? Je l'ai actuellement sous forme de deux ensembles de hachage séparés.


4 commentaires

LinkedHashMap


Une liste chaînée est une structure de données terrible pour effectuer des recherches efficaces et pour la garder triée, il existe de meilleures alternatives.


@ ÓscarLópez L'OP a écrit triable pas trié . De plus, si j'ai bien compris, ils doivent stocker une cartographie des indications médicamenteuses.


@Kartik qu'y a-t-il de plus triable que quelque chose qui est trié tout le temps? : p De plus, je pense que nous interprétons la question différemment. À ma connaissance, il trie en utilisant deux critères: med, indication. J'espère qu'OP clarifie cela, c'est déroutant car il parle de listes mais utilise un ensemble de hachage.


6 Réponses :


2
votes

Bien qu'il s'agisse d'un arbre et non d'une liste, un TreeSet répond aux exigences d'être trié, efficacement O (log (n)) interrogeable et vous pouvez obtenir sous-ensembles hors de celui-ci. Ce sera mieux si vous le déclarez comme SortedSet .


1 commentaires

OP utilisait déjà un ensemble de hachage, donc je suppose qu'il est d'accord pour ne pas avoir de dups. Nous ne savons même pas pourquoi il a mentionné des listes lorsqu'un ensemble était en cours d'utilisation.



0
votes

TreeSet est un ensemble d'éléments triés:

Une implémentation NavigableSet basée sur un TreeMap. Les éléments sont commandés en utilisant leur ordre naturel, ou par un comparateur fourni à définir l'heure de création, en fonction du constructeur utilisé.

Pour la recherche, le filtrage, le mappage, la création de sous-ensembles, etc. Je recommande d'utiliser l ' API Java Stream .


0 commentaires

0
votes

L'interface SortedSet fournit des fonctionnalités pour garder les éléments triés. Et l'interface NavigableSet fournit des fonctionnalités pour naviguer dans le SortedSet .

Depuis le TreeSet implémente l'interface NavigableSet , elle a les fonctionnalités des deux - le NavigableSet ainsi que le SortedSet . Le TreeSet utilise un arbre de recherche binaire auto-équilibré, plus spécifiquement un arbre rouge-noir.

La méthode contains () est utilisée pour vérifier si un élément donné est présent dans un TreeSet donné. Si l'élément est trouvé, il renvoie vrai, sinon faux.


0 commentaires

0
votes

Utilisez l'arborescence B +. Il s'agit de recherches triées par défaut et efficaces.

L'insertion peut cependant nécessiter des boucles pour la maintenir équilibrée.


0 commentaires

1
votes

Essayez d'utiliser TreeMap

  • stocke les paires valeur / clé dans l'ordre trié (croissant).
  • Vous pouvez accéder à la valeur à l'aide de la clé
  • La clé peut être "Médicament"
  • La valeur peut être "Indication"

0 commentaires

0
votes

Merci à tous! Après un peu d'expérimentation avec chacune des suggestions, j'ai pu déterminer qu'un TreeMap était en effet la meilleure solution. Étant donné que le treeMap contient des paires clé-valeur, la clé dans les deux cartes sert de "lien" pour maintenir la relation. Assurez-vous simplement que si vous ajoutez ou supprimez un élément d'une carte, vous devez faire de même avec la clé correspondante dans l'autre carte.


0 commentaires