gpt4 book ai didi

java - 使用 HashSet 时的奇怪行为

转载 作者:行者123 更新时间:2023-12-01 15:51:41 25 4
gpt4 key购买 nike

我正在使用 HashSet 来存储我编写的新类型的对象。类型定义如下:

class Node{
Node arr[] = new Node[5];
boolean flag = false;
}

我重写了 hashCode 如下:

int hash = Arrays.deepHashCode(arr);
if(flag==true)
return hash;
else
return -hash;

并且等于:

public boolean equals(Object other){
Node t = (Node) other;
return Arrays.deepEquals(arr, t.arr)&&(flag==t.flag);
}

我正在将单词添加到节点中(节点是 trie 节点),并且按照字典顺序执行此操作。然后我将节点存储到哈希集中。奇怪的是,虽然哈希集对于以一个字母开头的单词工作得很好,但一旦我到达以下一个字母开头的单词,我的代码就会卡住。例如,对于以“a”开头的单词,一切正常,但一旦遇到以“b”开头的单词,它就会卡住。 'c' 和 'd' 等也相同。

我将其范围缩小到一行代码:将节点添加到哈希集的行。

由于我没有写哈希集,所以我不知道这里发生了什么。我确信这就是代码被卡住的地方(它不会崩溃。它似乎无限循环,但我不确定)。有谁知道这是怎么回事吗?

--编辑--

经过大量的绞尽脑汁和许多打印语句之后,我确定我正在制作的图实际上不是 DAG,尽管它应该是,因此,deepHashCode 和 deepEquals 函数被抛弃。

最佳答案

如果不重写 hashCode() 方法会发生什么?您是否在节点数组中引用相同的节点,这可能会解释无限循环,但您应该会看到一些堆栈溢出异常。尝试不重写 hashCode() 方法,这意味着使用引用相等,它仍然发生吗?如果不是,那么您当前的 hashCode() 中有问题。

关于java - 使用 HashSet 时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5900914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com