首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用HashMap删除传递性关系

使用HashMap删除传递性关系
EN

Stack Overflow用户
提问于 2014-09-19 20:56:26
回答 1查看 386关注 0票数 0

我正在使用以下代码通过hashmap删除传递性子关系->父关系。( hashmap数据集是子级->父级条目。)

代码语言:javascript
复制
private static void factor_transitivity(Map<String,String> dataset, boolean complete) {
    if (!complete) {
        complete = true; // Assume that on this check everything will come out to be OK.
        for (Map.Entry<String, String> pair : dataset.entrySet()) {
            if (dataset.containsKey(pair.getValue())) {
                complete = false;
                String value = dataset.get(pair.getValue());
                dataset.put(pair.getKey(),value);
                //System.out.print("");
                break;
            }
        }
        factor_transitivity(dataset, complete);
    }
}

请注意评论

代码语言:javascript
复制
//System.out.println("")

线路。如果我取消对该行的注释,那么代码就可以正常工作。但是,如果我将其保留为注释状态,则会收到如下错误消息:

代码语言:javascript
复制
Exception in thread "main" java.lang.StackOverflowError
at java.util.HashMap.hash(HashMap.java:362)
at java.util.HashMap.getEntry(HashMap.java:462)
at java.util.HashMap.get(HashMap.java:417) 

为什么我会有这种奇怪的行为?

EN

回答 1

Stack Overflow用户

发布于 2014-09-19 21:04:13

编辑:http://ideone.com/zHX7NI

代码语言:javascript
复制
import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
  public static void main (String[] args) throws java.lang.Exception
  {
   // your code goes here
   factor_transitivity(new HashMap<String,String>(){{
     put("abc","abc");
     put("ghi","ghi");
     }},false );
   }
   private static void factor_transitivity(Map<String,String> dataset, boolean complete) {
   if (!complete) {
     complete = true; // Assume that on this check everything will come out to be OK.
     for (Map.Entry<String, String> pair : dataset.entrySet()) {
        if (dataset.containsKey(pair.getValue())) {
            complete = false;
            String value = dataset.get(pair.getValue());
            dataset.put(pair.getKey(),value);
            System.out.print("hello");
             break;
           }
       }
   factor_transitivity(dataset, complete);
  }
 }
}

现在你可以看到这段代码是递归的,它一直在调用factor_transitivity方法,并一次又一次地打印"hello“。即使当我注释掉该行时,由于该方法的递归性质,也会发生相同的错误(http://ideone.com/ffA0pG)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25934463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档