Java中arraylist是否contains某元素的问题

重写了OneElem中equals方法使得名字相同的话就判定arraylist中contains该元素
[code="java"]public class Test {
public static void main(String[] args) {
ArrayList oe=new ArrayList();
OneElem o;
for(int i=0; i o=new OneElem("one");
if(oe.contains(o))
System.out.println("Contain");
else{
System.out.println("None");
oe.add(o);
}
}
o=new OneElem("one");
if(oe.contains(o))
System.out.println("Contain");
else{
System.out.println("None");
oe.add(o);
}
}
}
[/code]
以上可以得出我想要的结果
[code="java"]public class Test1 {
public static void main(String[] args) {
ArrayList oe=new ArrayList();
OneElem o;
for(int i=0; i<3; i++){
o=new OneElem(""+i);
if(oe.contains(o))
System.out.println("Contain");
else{
System.out.println("None");
oe.add(o);
}
}
o=new OneElem(""+1);
if(oe.contains(o))
System.out.println("Contain");
else{
System.out.println("None");
oe.add(o);
}
}
}
[/code]
以上不行,我最后添加的它认为是新元素...这两个Test我用的是同一个OneElem类...这是为了什么...

你最好把equals贴出来 这是我执行的结果
package com.test;

import java.util.ArrayList;

class OneElem {
String name;

OneElem(String name) {
    this.name = name;
}

public String getName() {
    return this.name;
}

@Override
public boolean equals(Object arg0) {
    if (arg0 != null && arg0 instanceof OneElem) {
        return this.getName().equals(((OneElem) arg0).getName());
    }
    return false;
}

}

public class Test {

public static void main(String[] args) {
    ArrayList<OneElem> oe = new ArrayList<OneElem>();
    OneElem o;
    for (int i = 0; i < 3; i++) {
        o = new OneElem("" + i);
        if (oe.contains(o))
            System.out.println("Contain");
        else {
            System.out.println("None");
            oe.add(o);
        }
    }
    o = new OneElem("" + 1);
    if (oe.contains(o))
        System.out.println("Contain");
    else {
        System.out.println("None");
        oe.add(o);
    }
}

}

结果:
None
None
None
Contain

你把OneElem也贴出来撒

if (arg0 != null && arg0 instanceof OneElem)

arg0 instanceof OneElem 表示是OneElem 的一个实例
因为equals的参数为object的,所以可以接受任何的参数,对于不是OneElem类型的则return false。