17-4:ArrayList的contains/remove对对象操作关联equals的详解

来源:互联网 发布:java 漏洞 编辑:程序博客网 时间:2024/06/05 16:29
package test;import java.util.ArrayList;import java.util.Iterator;class Person {private String name;private int age;public Person() {super();}public Person(String name, int age) {super();this.name = name;this.age = age;}//@Override//public int hashCode() {////System.out.println(this+".......hashCode");////return name.hashCode()+age*27;////return 100;//}//重写equals方法,否则无法实现在集合的对象中排除重复的对象,如果是字符串就可以不用写这个//@Override//public boolean equals(Object obj) {////if(this == obj)//return true;////健壮性判断//if(!(obj instanceof Person))//throw new ClassCastException("类型错误");//////System.out.println(this+"....equals....."+obj);//Person p = (Person)obj;//return this.name.equals(p.name) && this.age == p.age;//}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//重写该方法public String toString(){return name+":"+age;}//@Override//public int compareTo(Object o) {////Person p = (Person)o;////int  temp = this.age-p.age;//return temp==0?this.name.compareTo(p.name):temp;//////int  temp = this.name.compareTo(p.name);////return temp==0?this.age-p.age:temp;/////*//if(this.age>p.age)//return 1;//if(this.age<p.age)//return -1;////else{////return this.name.compareTo(p.name);//}//*/////}}public class Test {public static void main(String []args){ArrayList al = new ArrayList();al.add("a1");al.add("a2");al.add("a1");al.add("a2");al.add("a3");al.add("a4");System.out.println(al);//输出ArrayList中不含重复的元素al = getSingleElement(al);System.out.println(al); ArrayList al2 = new ArrayList();al2.add(new Person("lisi1",21));al2.add(new Person("lisi2",22));al2.add(new Person("lisi3",23));al2.add(new Person("lisi4",24));al2.add(new Person("lisi2",22));al2.add(new Person("lisi3",23));//重写Person中的toString方法,自定义输出格式,否则输出类名及属性地址System.out.println(al2);al2 = getSingleElement(al2);//System.out.println(al.remove(new Person("lisi2",22)));System.out.println(al2);//ArrayList al = new ArrayList();//al.add(new Person("p1",21));//al.add(new Person("p2",22));//al.add(new Person("p2",23));//al.add(new Person("p4",24));//al.add(new Person("p2",25));////System.out.println();//System.out.println(al);//al = getSingleElement(al);//System.out.println(al); }private static ArrayList getSingleElement(ArrayList al) {ArrayList temp = new ArrayList();Iterator it = al.iterator();while(it.hasNext()){Object obj = it.next();//3,判断被迭代到的元素是否在临时容器存在//contains中依靠equals这个方法if(!temp.contains(obj)){temp.add(obj);}}return temp;}}



ArrayList的contains/remove方法对字符串操作的时候,不用重写equals,但是对对象操作时,需要重写equals

原因在于,需要比较内容,也就是要重写equals中比较具体对象的属性对比的方法