开发者

Help using recursion in Java

开发者 https://www.devze.com 2022-12-29 21:30 出处:网络
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 a

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, i开发者_如何学PythondGroupe)


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 ! 


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

0

精彩评论

暂无评论...
验证码 换一张
取 消