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中比较具体对象的属性对比的方法