java - vector 中的问题

标签 java vector

我试图通过检查 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/

相关文章:

java - 如何更改 Jason-JEdit 生成的进程的 java 内存堆量? [Linux]

c++ - 如何仅对 std::vector 中的子集进行排序?

java - Weka Apriori 算法快速 vector 输出内存位置值

java - Java中如何轻松顺利地从MediaType.JSON的数据中获取数据?

java - 在android中的html字符串中添加一个新的html标签

c++ - Assertion Failure Error,C++中vector subscript out of range问​​题

c++ - 通过确定系数找到两个 vector 的关系

c++ - vector 不在分离线程内推送值

java - 错误 : "class must implement abstract method X", 但它已经发生了

java - 使用 Maven 和 maven-bundle-plugin 在 JAR list 中添加 SVN 修订时出错