gpt4 book ai didi

Java ArrayList 问题

转载 作者:行者123 更新时间:2023-11-29 06:45:13 25 4
gpt4 key购买 nike

比方说,我有一个名为 A 的数组列表,它是非空的。

我创建了另一个 arrayList,B,并放入了 A 的一些元素。

for(someobject obj : A){
if(some_condition_is_met)
B.add(obj);
}

然后我用 B 做一些事情(从不修改、改组或删除它的对象。我选择 B 的一个元素,比如 B.get(i)

现在,我想找到 B.get(i) 在 A 中的位置。

我试过了

for(someobject obj : A){
if(obj.equals(B.get(i))
return A.lastIndexOf(obj);
}
return null;

但这一直返回null。也就是说,“等于”不匹配对象。

所以在我沮丧的时候我尝试了:

return A.get(A.lastIndexOf(B.get(i));

这导致了 ArrayINdexOutOfBounds 异常。

有什么想法我应该怎么做?我有一种感觉,我错过了一些明显的东西。还有一点——这是对我正在做的事情的极其简化的解释。在上面的示例中,创建 B 似乎毫无意义,但却是必要的。

问题的答案:

1)对象是自定义对象。啊,...我没有覆盖equals。可能就是这样。

2) 我可以确定 B 中的任何对象 mst B 在 A 中,因为在创建 B 时,首先我从中删除所有对象,以防万一,然后我只添加 A 中的对象并且我不会篡改对象一次B、

最佳答案

您尝试做的事情的原则应该有效。我可以狡辩说,执行 FOR 循环来搜索 A 以从 B 中找到对象的实例,然后对其执行 lastIndexOf 毫无意义。 lastIndexOf 无论如何都会遍历 A。你正在寻找某样东西,然后当你找到它时,你只是把它留在原处,然后重新寻找它。 (诚​​然,您的第一次搜索是从 A 的开头开始,而 lastIndexOf 将从末尾开始搜索。所以这就像从地下室开始寻找您的车 key ,然后一直到阁楼。然后当您找到它们时,您将它们留在那里,然后去阁楼再次开始搜索,一直走到地下室。)

我怀疑问题不在概念上,而在细节上。您可能会显示实际代码。如果代码太复杂,请尝试将其简化为基本要素,然后查看是否仍然出现错误。

一种可能:你真的把A的对象直接加到B了吗?或者你正在为 B 创建一个新对象,它是 A 对象的副本?如果是后者,那么除非您覆盖 equals(),否则它不会起作用,因为用户定义对象的默认 equals() 只检查它们是否是同一实例,而不是“等效”对象。

关于Java ArrayList 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6019837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com