2012-04-16 59 views
1

我有一个键/值对列表,我需要检测列表中值与某个键匹配的链。从列表中构建链接链

E.g.从下面可以有12,23,34或62,23,34

Key Value 
1 2 
3 4 
2 3 
6 2 

多于一个值可以是指向相同的密钥,但我需要存储不同的“链”为每个唯一的开始和结束点。该列表可以以任何顺序。

我正在使用Java,但我有点卡住如何解决这个问题。

请帮忙!

+0

我想你指的是 “12,23,34,62,23,34” 代替。 – 2012-04-16 14:23:35

+0

你好,我的错误,只是纠正它 - 谢谢 – Katie 2012-04-16 14:24:19

回答

0

递归!

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) 
0

创建一个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 
    } 
} 

显然,这是伪代码,将无法编译,但它应该让你开始

0

因为这看起来像功课,我会给你提示,以帮助您自己解决问题,而不是给你一个完整的解决方案。

  1. 对于地图中的任何键,都可以通过调用Map.get(key)来获得相应的值。
  2. 您可以使用任何值作为关键字来获取其相应的值(如果有的话)。
  3. 您可以使用Map.getKeys()遍历地图中的所有键。

如果您只想打印链条,这应该就足够了。如果你想以不同的数据结构存储链,请提供更多信息。