我知道这很简单但我很疯狂
public class CadastroPessoas {
Collection<Pessoa> lista;
Pessoa p;
public static void main(String[] args) {
CadastroPessoas p = new CadastroPessoas();
}
public CadastroPessoas() {
lista = new ArrayList<>();
for (int i = 0; i < 10; i++) {
p = new PessoaFisica();
p.setNome(String.format("name %02d", i));
p.setEmail(String.format("mail%02d@mail.com", i));
p.setTelefone(String.format("122312%02d", i));
if (!lista.contains(p)) {
lista.add(p);
}
}
for (Pessoa pessoa : lista) {
System.out.println(pessoa.toString());
}
} }
我想在我的收藏中添加各种“PessoaFisica”,但我需要检查这个人是否存在,并且使用此代码我只需添加第一个,我的代码有什么问题
答案 0 :(得分:1)
关于contains
的{{1}}方法的文档(http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html):
如果此collection包含指定的元素,则返回true。更多 正式地,当且仅当此集合包含at时返回true 至少有一个元素e(o == null?e == null:o.equals(e))。
Collection interface
调用类Object
的非重写方法我建议你覆盖方法equals,例如
o.equals(e)
答案 1 :(得分:1)
我这边有两个输入。
1)您可能在此处使用了错误的收集界面。如果你需要防止重复,你可能最好使用Set例如。 HashSet或TreeSet。
2)正如你所知,你需要在PessoaFisica中覆盖equals方法并实现你自己的身份检查,当你在它时,不要忘记覆盖hashCode()方法。 equals和hashCode之间有一个契约。两个相等的对象必须具有相同的hashCodes.Most IDE将为您生成此代码,在想法转到Code-&gt; Generate-&gt; HashCode和Equals。它会询问您包含的字段并自动生成这两种方法。
答案 2 :(得分:0)
来自javadoc的列表界面:
boolean contains(Object o)
Returns true if this list contains the specified element. More formally, returns true if and only if this list contains at least one element e such that (o==null ? e==null : o.equals(e))
所以,看起来你没有覆盖PessoaFisica
类中的equals方法。