Java for循环期间的信息丢失
我对这种方法有一个问题:Java for循环期间的信息丢失,java,for-loop,set,Java,For Loop,Set,我对这种方法有一个问题: private boolean reflectionEqualsSet(Object left, Object right) { Set leftSet = (Set) left; Set rightSet = (Set) right; if (leftSet == null) { // POF tricks: if set to serialize is null, the deserialized set is empty return righ
private boolean reflectionEqualsSet(Object left, Object right) {
Set leftSet = (Set) left;
Set rightSet = (Set) right;
if (leftSet == null) {
// POF tricks: if set to serialize is null, the deserialized set is empty
return rightSet != null && rightSet.size() == 0;
}
// check size
if (leftSet.size() != leftSet.size()) {
return false;
}
// check values
for (Object currLeft : leftSet) {
boolean found = false;
for (Object currRight : rightSet) {
if (isEqual(currLeft, currRight)) {
found = true;
break;
}
}
if (!found) {
return false;
}
}
return true;
}
问题是:
我有一个对象,在leftSet中有三个随机填充值,分别是2个UUID和1个整数。
左集合中的值在for循环中完全改变。在调试过程中,我发现在第一次迭代中,currSet已经有了完全不同的值,我不知道为什么。
在currRight的内部循环中,这不会发生
我已经调试了几个小时,我发现问题出在这一行,有人知道为什么值会改变吗?不是顺序,而是价值。
我知道这不是关于这个问题的太多信息,但这就是我能说的,我不知道如何更好地解释它,对不起
谢谢首先,您的尺码检查已经取消
// check size
// if (leftSet.size() != leftSet.size()) {
if (leftSet.size() != rightSet.size()) {
return false;
}
接下来,我不相信你的isEqual方法-请重写
明显返回错误;在for循环之后,您可以消除已发现的问题。您可以展示一个简短但完整的示例来演示该问题吗?你说的currSet是什么意思?它不在你的代码中-你是说leftSet吗?你用的是什么类型的电视机?isEqual做什么?currSet只是一个对象。isEqual比较两个对象是否相等,而不是此处的点。我使用的是一个普通集,有时会发生的情况是:我在leftSet UUID、Integer、UUID中的对象中的值被分配给currSet,这些值类似于:UUID+1、Random Integer、Random UUIDSet是一个接口。你是说散列集吗?LinkedHashSet?还有别的吗?同样,如果我们能够重现这个问题,那么帮助您会容易得多…leftSet.size的用途是什么!=leftSet.size check?投票结束这个问题。我喜欢:我不相信你的isEqual方法。。。。这是唯一可能有副作用的隐藏代码。信息丢失是在等质量方法之前。我已经做了你建议的改变。正如我所说,问题在for循环中。@EduardoRocha:正如Jon Skeet所说的,我也同意,如果你不发布一个允许我们重现你错误的帖子,你可以说任何你想说的话,但你不会得到满意的答案。
// if (isEqual(currLeft, currRight)) {
if (currLeft.equals(currRight)) {
return true; // <-- and just short-circuit with return true!
}