Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java for循环期间的信息丢失_Java_For Loop_Set - Fatal编程技术网

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