【问题标题】:Union-Find using Hashmap in Java在 Java 中使用 Hashmap 进行联合查找
【发布时间】:2015-12-25 20:38:34
【问题描述】:

我正在研究一种联合查找算法,使用以下方法:

HashMap<E,E> parent = new HashMap<E,E>();

我已经写了这个方法来找到一个家庭的最后一个成员

    public E find(E src)
    {
        while (parent.get(src) != null)
            src = parent.get(src);
        return src;
    }

它有效,但问题是我将使用大集合处理这个哈希图;所以我想修改 find 方法,使其将 find(src) 设置为 src 的“父亲”。但我不能按原样那样做,我有直觉的原因:如果我尝试在方法的开头进行复制

E copy = src;

然后在方法结束时

parent.put(copy,src);

它不起作用,因为它实际上并没有进行“正确”的复制。我试过克隆父母,但它也不起作用。

谢谢大家,圣诞快乐!

【问题讨论】:

  • 那...乍一看,它应该可以工作,但它不应该进行任何复制。不行怎么办?
  • 我不想复制任何东西。国际海事组织。 E copy = src 只是再次引用了 src。现在 src 指向对象并复制指向同一个对象...您必须重写 clone 方法以包含您要克隆的所有成员...
  • DaveTheRave :是的,就是这样,它是一个引用而不是克隆,不知道如何解决它,将在下面尝试您的答案并回复您,谢谢!

标签: java reference hashmap pass-by-reference union-find


【解决方案1】:

也许是这个?

公共 E 查找(E src)

{
    E mysrc= src;
    while (parent.get(mysrc) != null)
        mysrc= parent.get(mysrc);
    parent.put(mysrc,src);
    return mysrc;
}

【讨论】:

  • parent.put(mysrc,src) 替换为parent.put(src,mysrc),否则班级代表每次都会改变,这不是我们想要的。无论如何,它不起作用,我认为这并不能解决引用问题
猜你喜欢
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 2011-10-30
相关资源
最近更新 更多