我有一个键/值对列表,我需要检测列表中值与某个键匹配的链。从列表中构建链接链
E.g.从下面可以有12,23,34或62,23,34
Key Value
1 2
3 4
2 3
6 2
多于一个值可以是指向相同的密钥,但我需要存储不同的“链”为每个唯一的开始和结束点。该列表可以以任何顺序。
我正在使用Java,但我有点卡住如何解决这个问题。
请帮忙!
我有一个键/值对列表,我需要检测列表中值与某个键匹配的链。从列表中构建链接链
E.g.从下面可以有12,23,34或62,23,34
Key Value
1 2
3 4
2 3
6 2
多于一个值可以是指向相同的密钥,但我需要存储不同的“链”为每个唯一的开始和结束点。该列表可以以任何顺序。
我正在使用Java,但我有点卡住如何解决这个问题。
请帮忙!
递归!
import java.util.HashMap;
import java.util.Map;
public class Chain
{
private static Map< String , String > map;
public static void main(String args[])
{
map = new HashMap< String , String >();
map.put("1" , "2");
map.put("3" , "4");
map.put("2" , "3");
map.put("6" , "2");
for (String key : map.keySet())
{
System.out.print("(" + key + "," + map.get(key) + ")");
recurse(map.get(key));
System.out.println();
}
}
private static void recurse(String value)
{
if (map.containsKey(value))
{
System.out.print(" (" + value + "," + map.get(value) + ")");
recurse(map.get(value));
}
}
}
为您提供以下的输出:
(3,4)
(2,3) (3,4)
(1,2) (2,3) (3,4)
(6,2) (2,3) (3,4)
创建一个Map<Integer, List<Integer>>
,将所有对存储在该地图中,然后迭代该地图。
伪代码:
// 1st step
foreach(key, value){
if(!map.containsKey(key)){
map.put(key, new ArrayList());
}
map.get(key).add(value);
}
// 2nd step
foreach(entry /* of map */){
if(map.containsKey(entry.value)){
// print pairs
}
}
显然,这是伪代码,将无法编译,但它应该让你开始
因为这看起来像功课,我会给你提示,以帮助您自己解决问题,而不是给你一个完整的解决方案。
Map.get(key)
来获得相应的值。Map.getKeys()
遍历地图中的所有键。如果您只想打印链条,这应该就足够了。如果你想以不同的数据结构存储链,请提供更多信息。
我想你指的是 “12,23,34,62,23,34” 代替。 – 2012-04-16 14:23:35
你好,我的错误,只是纠正它 - 谢谢 – Katie 2012-04-16 14:24:19