问题描述
重写了OneElem中equals方法使得名字相同的话就判定arraylist中contains该元素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("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); } }}以上可以得出我想要的结果public class Test1 { 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); } }}以上不行,我最后添加的它认为是新元素...这两个Test我用的是同一个OneElem类...这是为了什么... 问题补充:href 写道
解决方案
你最好把equals贴出来 这是我执行的结果package com.test;import java.util.ArrayList;class OneElem {String name;OneElem(String name) {this.name = name;}public String getName() {return this.name;}@Overridepublic 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);}}}结果:NoneNoneNoneContain
解决方案二:
if (arg0 != null && arg0 instanceof OneElem) arg0 instanceof OneElem 表示是OneElem 的一个实例因为equals的参数为object的,所以可以接受任何的参数,对于不是OneElem类型的则return false。
解决方案三:
你把OneElem也贴出来撒