我正在尝试通过检查矢量是否已经包含数据来向矢量添加一些数据,即使矢量具有数据,循环也将进入其他块。

Vector object = (Vector) listUserEvents.get(key);
Vector compareEventData = (Vector) hCompareTable.get(compareKey);

for (int i = 0; i < compareEventData.size(); i++) {
    EventData eCompare = (EventData) compareEventData.elementAt(i);
    if (object.contains(eCompare)) {
        System.out.println("in if of compare");
    } else {
        System.out.println("in else of compare");
}

最佳答案

如果代码的行为不符合您的预期,则很可能您不了解contains的实际作用。

contains方法正在向量中查找equals方法说等于参数的元素;例如它(或多或少)等于:

    boolean found = false;
    for (Object eventData : object) {
        if (eventData.equals(eCompare)) {
             found = true;
        }
    }


如果这给出了意外的答案,则可能的原因是为equals定义了(或未定义)EventData的方式。特别是,如果您没有覆盖equals,则EventData可能是从equals继承Object方法的。如果这样做,则equals表示“具有相同的对象引用”。对于您的用例,这可能是错误的语义。

09-11 20:18