当前位置: 首页 > 知识库问答 >
问题:

我使用列表吗。正确移除?

汪博艺
2023-03-14

假设我知道列表SomeList包含thatObj。下面的代码是否从SomeList中删除了对thatObj的引用?

SomeClass el = (SomeClass) thatObj.clone();
SomeList.remove(el);

如果此方法以某种方式比较对象,则无法通过引用查找。直觉建议它应该使用Object.equals如果引用指向同一个对象,则返回true,因此这段代码将不起作用。

如果没有,那么一个额外的问题:如何从列表中删除,如果没有引用,但知道所有成员的对象有问题?

共有3个答案

宋勇
2023-03-14

重写类上的equals方法--这里是javadoc。还可以查看Java中的重写java equals()方法quirk和重写equals和hashCode。

满元凯
2023-03-14

remove方法在内部使用equals方法检查列表中的对象。如果equal返回true,则它将被删除。重写equals方法将允许正确删除对象。以下是ArrayList移除方法的代码,供您参考:

 public boolean remove(Object o) {
    if (o == null) {
            for (int index = 0; index < size; index++)
        if (elementData[index] == null) {
            fastRemove(index);
            return true;
        }
    } else {
        for (int index = 0; index < size; index++)
        if (o.equals(elementData[index])) {
            fastRemove(index);
            return true;
        }
        }
    return false;
    }
燕禄
2023-03-14

如果此方法以某种方式比较对象,则无法通过引用查找。直觉建议它应该使用Object.equals如果引用指向同一个对象,则返回true,因此这段代码将不起作用。

是的,你是对的。

如果没有,那么一个额外的问题:如何从列表中删除,如果没有引用,但知道所有成员的对象有问题?

两种可能性:

  • 重写类中的equals方法,创建一个包含所有已知成员的新实例,并删除将新创建的实例作为参数传递的
  • 遍历列表中的所有对象,并删除具有等于您所拥有的值的成员的对象
 类似资料:
  • 我使用以下方法将csv文件读入Spark: df=spark.read.format(file_type).options(header='true',quote='\"',ignoreleadingwhitespace='true',inferschema='true').load(file_location) 这是正常行为还是读错了? 更新:我将标记问题作为回答,因为下面的提示是有用的。然而,

  • 问题内容: 我现在正在开发应用程序,并进行全局切换。我想包装起来以方便使用。 然后,我在Firefox控制台中得到此结果。 如果我想使用被呼叫的行号登录该怎么办? 问题答案: 这是一个古老的问题,提供的所有答案都太过分了,存在跨浏览器的重大问题,并且没有提供任何超级有用的东西。该解决方案可在每种浏览器中使用,并完全按需报告所有控制台数据。无需黑客,只需一行代码即可签出codepen。 像这样创建开

  • java.lang.IllegalStateException:迁移未正确处理data_table 应为:TableInfo{name=“data_table”,columns=url=column{name=“url”,type=“text”,notnull=false,primarykeyposition=0}..... 找到:TableInfo{name='data_table',colum

  • 问题内容: 我想在Java中使用池化连接(因为每个线程创建一个连接非常昂贵),所以我正在使用该对象。我正在跨线程保留我的数据源。因此,我在整个应用程序中仅使用一个数据源,如下所示: 现在,我已经创建了数据源,然后在每个单独的线程中执行以下操作: 我猜我很困惑, 这真的 是在 获取池连接吗? 这个线程安全吗?我注意到PooledConnection具有诸如notify()和wait()之类的方法…这

  • Mongock看起来很有希望。我们希望在具有多个并行运行的副本的kubernetes服务中使用它。 我们希望在部署我们的服务时,第一个副本将获得mongockLock,并且它的所有ChangeLogs/ChangeSets将在其他副本尝试运行它们之前完成。 我们在kubernetes环境中运行一个mongodb实例,我们希望mongock变更日志/变更集只执行一次。 mongockLock是否保证