包含java中的方法

时间:2014-09-07 02:53:08

标签: java arraylist collections

我知道这很简单但我很疯狂

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”,但我需要检查这个人是否存在,并且使用此代码我只需添加第一个,我的代码有什么问题

3 个答案:

答案 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方法。