我正在尝试通过检查矢量是否已经包含数据来向矢量添加一些数据,即使矢量具有数据,循环也将进入其他块。
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
表示“具有相同的对象引用”。对于您的用例,这可能是错误的语义。