【问题标题】:Construct chain of links from list从列表构造链接链
【发布时间】:2012-04-16 14:21:25
【问题描述】:

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

例如从下面可能有 12、23、34 或 62、23、34

Key  Value
1    2
3    4
2    3
6    2

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

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

请帮忙!

【问题讨论】:

  • 我认为您的意思是“12、23、34 或 62、23、34”。
  • 是的,我的错误,刚刚纠正 - 谢谢

标签: java list hashmap


【解决方案1】:

递归!

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)

【讨论】:

    【解决方案2】:

    创建一个Map&lt;Integer, List&lt;Integer&gt;&gt;,将所有配对存储在该映射中,然后迭代映射。

    伪代码:

    // 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
        }
    }
    

    显然这是无法编译的伪代码,但它应该可以帮助您入门

    【讨论】:

      【解决方案3】:

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

      1. 对于map中的任意key,可以通过调用Map.get(key)获取对应的值。
      2. 您可以使用任何值作为键来获取其对应的值(如果有的话)。
      3. 您可以使用Map.getKeys() 遍历映射中的所有键。

      如果你只想打印出链条,这就足够了。如果您想将链存储在一些不同的数据结构中,请提供更多信息。

      【讨论】:

        猜你喜欢
        • 2015-07-24
        • 2014-11-01
        • 1970-01-01
        • 2022-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-23
        相关资源
        最近更新 更多