2012-05-06 6 views
1

Besoin de choisir la structure de données optimale pour un travail rapide avec la liste des lieux et des régions.Quelle structure de données choisir?

Il est POJO simple pour endroits (villes):

public class Location { 

    private String name; 
    private int post; //id 

Et pour les régions (districts):

public class Region { 
    private String name; 
    private int id; 
    private List<Location> cities; 

Et enfin je List de Region objets. Ce que je dois faire:

  1. Emplacements Recherche par nom par son poste (id)
  2. Emplacements de recherche affichent son nom. Remarque: Nom n'est pas unique, donc je dois préférer un emplacement concret sur un autre en cas de noms identiques

La question est quelle est la structure de données dois-je utiliser? Je pense à TreeMap avec TOUTES les Emplacements de TOUTES les régions. Je peux donc obtenir rapidement l'emplacement par nom (chaîne). Pour p 1. J'ai la solution: le poste de Location contient l'id de Région. Donc, si Region a id = 1, alors son emplacement sera 10001, 10002 etc. Ou peut-être ai-je besoin de choisir un nouveau type de collection introduit par Guava, puisqu'il est déjà présent dans le projet?

+6

Vous ne devez pas lier des entités par ID, vous devez les lier directement par références, c'est pour cela qu'elles sont. – svick

+0

@svick J'ai besoin d'utiliser id ici pour travailler avec le client, qui envoie et reçoit seulement – vacuum

Répondre

2

Ajouter tous les lieux à deux HashMap s:

  1. un avec tous les emplacements avec le nom du lieu comme clé et une liste des emplacements comme valeur.
  2. autre avec id comme clé et Emplacement comme valeur?

De préférence, masquez les deux hashmaps d'une classe en effectuant les recherches pour vous.

Ou est-ce qu'il me manque quelque chose?

+0

Bon point, mais reste deux question: comment définir "préféré" Emplacements (pour le cas où le nom est identique). Peut-être ajouter le champ 'priority' dans Location. Et en second lieu: comment bien synchroniser les changements de la liste originale avec cette carte? – vacuum

+0

Bien est un emplacement préféré par rapport à l'autre? J'ai suggéré une liste de localisation pour chaque nom (liste comme les valeurs dans la carte).Alors ajoutez-les à la liste dans l'ordre préféré le cas échéant et choisissez le premier (alors vous pourriez ne pas avoir besoin de la liste du tout). Ou vous pouvez les présenter tous avec des informations supplémentaires telles que la région. Le deuxième point est à l'orientation de l'objet, cacher tout derrière une classe, mettre à jour seulement dans un endroit et cet endroit met à jour les cartes, etc. –

2

Je vous recommande de créer la classe LocationRepository:

class LocationRepository { 
    Location getById(int id); 
    Collection<Location> getByName(String id); 
} 

Ce référentiel devrait contenir 2 collections: Carte (soit HashMap ou TreeMap des lieux. Map<Integer, Location> où la clé est l'ID d'emplacement La deuxième carte devrait être . [MulitMap][1] de goyave qui mappe entre le nom et la collection d'emplacements correspondant à

+0

de l'identifiant que l'implémentation de MultiMap choisir? – vacuum

+0

L'implémentation de @vacuum dépend de vos besoins. Vous pourriez trouver de nombreuses implémentations Multimap. HashMultimap est un choix, veuillez noter que vous devez remplacer le hashcode et les méthodes égales pour la classe de clé. –

Questions connexes