2010-11-11 2 views
1

Je suis encouragé par tant d'experts Java chaleureux que j'ose poser une autre question aujourd'hui pour obtenir de l'aide (toutes mes questions proviennent de projets concrets - et puisque je prends un raccourci pour apprendre Java, j'ai plus de difficultés que de prendre un cours normal de Java) ..Java: trouvez le parent et les enfants .... Tree, Loop, ArrayList, List, HashMap, .... que faire?

Voici la structure de données que je veux atteindre (le résultat final devrait être un TreeMap avec identifiant comme la clé)

id (int) Characteristic (int) parent(by id) immediate children (by id) 
1   1     {}   {2,3,4} 
2   99     {1}   {} 
3   99     {1}   {} 
4   2     {1}   {5,6} 
5   99     {2}   {} 
6   3     {2}   {7,8} 
7   99     {3}   {} 
8   4     {3}   {x,xx, ...} 
.... 
.... 

les deux premières colonnes sont connues , les deux dernières colonnes doivent être obtenues par programmation.

Voici les règles:

1) élément avec Caractéristque comme 1 est ancêtre et aura jamais parent.

2) Les objets avec la caractéristique 99 n'auront jamais d'enfants. 3) Les articles avec les caractéristiques (2 - 9) peuvent avoir le parent et les enfants et leurs enfants peuvent avoir des enfants (qui doivent être plus grands que eux ou 99) ou pas d'enfants (99). Par exemple, 2 peut avoir 99 et 3 que les enfants, mais 3 ne peut pas avoir 2 comme leur enfant)

grâce

+3

John, aussi chaleureux que nous pouvons être ... on ne sait pas quelle est la vraie question. – Carl

+1

Cher John, Es-tu sûr que ce n'est pas les devoirs? –

+0

non, c'est de mon petit projet. (J'aimerais pouvoir être étudiant à nouveau!) Puisque je suis familier avec SAS, je suis plus enclin à penser en termes d'ensembles de données .... – john

Répondre

0

Vous n'êtes pas poser une question John. Mais vous devez penser à l'orientation de l'objet ici. Créer une classe comme ceci:

Item: 
    int id 
    int characteristic 
    Item parent 
    List<Item> children 

Vous pouvez utiliser l'objet ci-dessus indépendamment dans quelle structure de données que vous utilisez. Il est important de garder les objets découplés des structures de données. Vous pourrez décider plus tard que vous avez besoin d'une carte ou d'un jeu d'arbres. Maintenant tout ce que vous avez à faire est de créer un jeu d'arbres avec tous les objets Objet.

Votre question n'a rien à voir avec treeet et plus encore comment créer ces objets en utilisant une orientation d'objet propre.

0

Vous pourriez confondre les concepts d'un arbre et d'une carte. Une carte Java fournit une interface qui vous permet de mapper un groupe d'objets en utilisant (généralement) un autre type d'objet en tant que clé. Dans votre cas, il semble que vous utiliserez Longs comme clés. La carte concrète peut être une HashMap ou une TreeMap, chacune ayant ses propres avantages - La récupération de HashMap est généralement plus rapide, mais TreeMap a l'avantage de trier les clés. Mais vous ne pouvez pas forcer TreeMap à créer une arborescence particulière. Il va gérer sa forme d'arbre lui-même. Pour représenter vos éléments d'arborescence, vous aurez besoin d'une sorte d'objet nœud d'arbre, prenant en charge des opérations telles que addChild, getChildren, getParent. Si vous construisez votre arborescence à l'aide d'objets de nœud d'arbre, vous pouvez facilement ajouter ces objets à une carte et les récupérer par identifiant.