tags:

views:

141

answers:

3

I have a class Group. In the class I have two fields, idGroup IdGroupGroup. Groups may be part of other groups. My class Group is defined in a HashMap<Integer,Integer>; the key is IdGroupGroup and value is idGroup. I want to search the map for a particular idGroup; can I use recursion to do this?

class Group
{

    int idGroupe
    String word
}

HashMap<Integer,Integer> GroupeGroupe = new HashMap<Integer,Integer>();
GroupeGroupe.put(idGroupeGroupe, idGroupe)
+1  A: 

Given a vague question, I have to guess a lot, but perhaps it's something like this you're looking for:

import java.util.*;

public class Test {

    static Map<Integer, Integer> groups = new HashMap<Integer, Integer>();

    public static void main(String... args) {
        groups.put(1, 2);
        groups.put(2, 3);
        groups.put(2, 4);
        groups.put(4, 5);
        System.out.println(searchFor(1, 5));
    }

    private static String searchFor(int from, int target) {

        // Target found?
        if (from == target) return "" + target;

        // Dead end?
        if (!groups.containsKey(from)) return null;

        // Recurse and try to find it from here.
        String path = searchFor(groups.get(from), target);
        return path == null ? null : from + " -> " + path;
    }
}

Output: 1 -> 2 -> 4 -> 5


Or something like this:

    static Map<Integer, Group> groups = new HashMap<Integer, Group>();

    public static void main(String... args) {
        groups.put(0, new Group(1, "hello")); // (0: -)       -> (1: "hello")
        groups.put(2, new Group(9, "!"));     // (2: "world") -> (9, "!")
        groups.put(3, new Group(5, "bye"));   // (3: -)       -> (5, "bye")
        groups.put(1, new Group(2, "world")); // (1: "hello") -> (2: "world")
        System.out.println(traverse(0));
    }

    private static String traverse(int from) {
        if (!groups.containsKey(from)) return "";

        String path = traverse(groups.get(from).idGroupe);
        return path == null ? null : groups.get(from).word + " " + path;
    }
}

Which prints:

hello world ! 
aioobe
just search for the first element (key) of yur mapexample search for 1Output->1 have 2 , 2 is a Key and have 3 and stop because 3 is not a key of map
Mercer
woho, I won the guessing game...
aioobe
A: 

Hi, I'm not sure I understand your question, but I'll try to answer. Do I understand you correctly if you have a java HashMap with entries ? In that case you only have one entry for each idGroupGroup (java api):

   public V put(K key,V value)

Associates the specified value with the specified key in this map. If the map previously contained a mapping for the key, the old value is replaced.

if this is fine, and you just want to do a recursion of all element you can use:

public Collection<V> values()

Returns a Collection view of the values contained in this map. The collection is backed by the map, so changes to the map are reflected in the collection, and vice-versa. If the map is modified while an iteration over the collection is in progress (except through the iterator's own remove operation), the results of the iteration are undefined. The collection supports element removal, which removes the corresponding mapping from the map, via the Iterator.remove, Collection.remove, removeAll, retainAll and clear operations. It does not support the add or addAll operations.

have a look at: http://java.sun.com/javase/6/docs/api/java/util/HashMap.html

cheers, Jørgen

rakke