/* 在ArrayList中存储自定义对象 为了实现在ArrayList中存储不重复的对象,需要重写equals方法。remove()方法和contains()方法都会调用equals()方法。 在使用HashSet时,也要在对象类中重写两个方法即,hashCode()和equals()方法。因为HashSet会在底层调用这两个函数。 首先比较HashCode(对象引用或地址),如果相同,再用equals比较对象是否相同。 */ import java.util.*; class Person { private String name; private int age; Person(String name,int age) { this.name=name; this.age=age; } public String getName() { return name; } public int getAge() { return age; } public boolean equals(Object obj) //为了比较对象内容,重写equals方法 { if(!(obj instanceof Person)) return false; Person p=(Person)obj; return this.name.equals(p.name) && this.age==p.age; } } class ArrayListTest2 { public static void main(String[] args) { ArrayList al=new ArrayList(); al.add(new Person("Jhon_1",20)); al.add(new Person("Jhon_2",20)); al.add(new Person("Jhon_3",20)); al.add(new Person("Jhon_3",20)); al.add(new Person("Jhon_5",20)); al.add(new Person("Jhon_3",20)); //sop(al); sop(al.remove(new Person("Jhon_5",20))); //底层也是使用equals方法。 al=quchong(al); Iterator it=al.iterator(); while(it.hasNext()) { Object obj=it.next(); Person p=(Person)obj; sop(p.getName()+"..."+p.getAge()); } System.out.println("Hello World!"); } public static ArrayList quchong(ArrayList al) { ArrayList al_des=new ArrayList(); Iterator it=al.iterator(); while(it.hasNext()) { Object obj=it.next(); if(!al_des.contains(obj)) //contains在底层调用了equals。但是这个原始的equals方法是对对象地址进行比较,而不是对对象内容进行比较,所以需要重写。 al_des.add(obj); } return al_des; } public static void sop(Object obj) { System.out.println(obj); } }
时间: 2024-10-14 09:21:39