gpt4 book ai didi

java - 用户定义对象的 ArrayList 的 indexOf() 不起作用

转载 作者:行者123 更新时间:2023-11-30 02:39:37 25 4
gpt4 key购买 nike

当我尝试使用由用户定义的对象组成的 ArrayList 的 indexOf() 时,我没有得到正确的答案。以下是创建其中一个对象的代码:

    State kansas = new State("KS", 5570.81, 2000)

因此,该对象的名称是“kansas”

以下是创建 ArrayList 并添加对象的代码:

    ArrayList<State> allStates = new ArrayList<State>();    
allStates.add(kansas);

这是我尝试用来查找该对象的索引的代码:

    System.out.println(allStates.indexOf(kansas));

此时,我的编译器 (Eclipse) 会向我抛出一个红色 X,表明我的代码存在问题,问题是它无法识别“堪萨斯”。所以我尝试了这个:

    String s = "kansas";
System.out.println(allStates.indexOf(s));

它会运行,但结果是-1。

我正在调用不同类中的方法来创建 ArrayList,而不是在与我的主要方法相同的类中创建它,但我对编码还很陌生,我不确定这是否是我要去的地方错误。但是,为了使我正在编写的程序正常工作,我需要存储有关每个 State 对象的数据,以便我可以从 main 方法访问它。

有什么建议吗?

*这是我第一次发布问题,我不确定要讨论多少细节,所以如果我缺少相关信息,请告诉我:)

最佳答案

方法indexOf使用equlas()方法来比较对象。这就是为什么您必须在自定义类中重写 equals 方法(如果您计划在 Map 中也使用类重写 hashCode 方法)。大多数 IDE 都可以生成这些方法(equals 和 hashCode)。
这是简单的例子。

public class State {

private String stateCode;

public State(String stateCode /* other parameters*/) {
this.stateCode = stateCode;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;

if (o == null || getClass() != o.getClass()) return false;

State state = (State) o;

return stateCode.equals(state.stateCode);
}

@Override
public int hashCode() {
return stateCode.hashCode();
}
}

关于java - 用户定义对象的 ArrayList 的 indexOf() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42127763/

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