从列表构建链接链

时间:2012-04-16 14:21:25

标签: java list hashmap

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

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

Key  Value
1    2
3    4
2    3
6    2

多个值可以指向同一个键,但我需要为每个唯一的起点和终点存储不同的“链”。列表可以是任何顺序。

我正在使用Java但是我对如何解决这个问题感到困惑。

请帮忙!

3 个答案:

答案 0 :(得分: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
    }
}

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

答案 1 :(得分:0)

由于这看起来像是家庭作业,我会给你提示,帮助你自己解决问题,而不是给你一个完整的解决方案。

  1. 对于地图中的任何键,您可以通过调用Map.get(key)来获取相应的值。
  2. 您可以使用任何值作为键来获取其对应的值(如果有的话)。
  3. 您可以使用Map.getKeys()迭代地图中的所有键。
  4. 如果您只想打印链条,这应该足够了。如果您想将链存储在某些不同的数据结构中,请提供更多信息。

答案 2 :(得分: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)