gpt4 book ai didi

java - 生成对象并放入不重复的数组列表中

转载 作者:行者123 更新时间:2023-12-04 05:08:27 24 4
gpt4 key购买 nike

嗨,我正在弄清楚为什么这段代码没有按照我希望的方式工作..

我基本上想要的是一个随机对象,它有一个 char 和一个 int 生成并将它放入一个数组列表中。但是,如果生成的匹配数组列表中的相同,则必须再次重新生成数字并检查它是否存在。如果它不存在,它将被添加到数组列表中。

    private final char letter;
private final int num;
private static Collection<RegistrationNumber> REGISTRATION_NUMBER = new ArrayList<RegistrationNumber>();

private RegistrationNumber(){
Random rand = new Random();
this.num = (1+(rand.nextInt(3)));
this.letter = Character.toUpperCase((char)(rand.nextInt(1)+'a'));
}

public static RegistrationNumber getInstance(){
boolean foo = false;
RegistrationNumber rn = null;
while(!foo){
rn = new RegistrationNumber();
if(!REGISTRATION_NUMBER.contains(rn)){
REGISTRATION_NUMBER.add(rn);
foo=true;
}
}return rn;
}

一旦我查看了数组列表,仍然有一些重复,例如 [A1,A1,A2] 或 [A2,A2,A3]

非常感谢!

最佳答案

为了contains(rn)工作方法,RegistrationNumber必须覆盖 equals .否则,具有相同信息的两个不同对象将不被视为相同。

当您覆盖 equals 时,您还需要覆盖 hashCode , 因为 java.Object的契约(Contract)要求您同时覆盖两者。

最后,您可以考虑使用 LinkedHashSet 注册集合:它为您提供可预测的迭代顺序,同时自动防止重复。当然你仍然需要覆盖equalshashCode .

关于java - 生成对象并放入不重复的数组列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15203779/

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