我试图通过检查 vector 是否已经具有数据来向 vector 添加一些数据,即使 vector 具有数据,循环也会进入 else block 。
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
方法正在 vector 中查找 equals
方法认为等于参数的元素;例如它(或多或少)相当于:
boolean found = false;
for (Object eventData : object) {
if (eventData.equals(eCompare)) {
found = true;
}
}
如果这给出了意外的答案,则可能的原因是为 EventData
定义(或未定义)equals
的方式。特别是,如果您没有重写 equals
,则 EventData
可能会从 Object
继承 equals
方法。如果这样做,那么等于
意味着“具有相同的对象引用”。对于您的用例来说,这可能是错误的语义。
关于java - vector 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10430823/