在毕老师第14天的视频中,老师举了这么两个例子。名字分别是ArrayListTest2 和HashSetTest,不知道还有没有印象。
姓名和年龄相同为同一个人,重复元素。
首先是ArrayListTest2- /*
- 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
- 比如:存人对象,同姓名,同年龄视为同一个人,为重复元素
- */
- import java.util.*;
- class ArrayListTest2{
- public static void main(String[] args){
- Person p1=new Person("mike",18);
- Person p2=new Person("mike",18);
- Person p3=new Person("LiLiSi",19);
- Person p4=new Person("LiLiSi",19);
- Person p5=new Person("Jason",18);
- Person p6=new Person("Tom",20);
- ArrayList al=new ArrayList();
- al.add(p1);
- al.add(p2);
- al.add(p3);
- al.add(p4);
- al.add(p5);
- al.add(p6);
- al=Chong(al);
- for(int i=0;i<al.size();i++){
- Person p_temp=(Person)al.get(i);
- sop(p_temp.getName()+"..."+p_temp.getAge());
- }
-
-
- }
- public static void sop(Object obj){
- System.out.println(obj);
- }
- public static ArrayList Chong(ArrayList al){
- ArrayList al2=new ArrayList();
- for(int i=0;i<al.size();i++){
- Person p1=(Person)al.get(i);
- if(al2.isEmpty())
- al2.add(p1);
- else{
- boolean flag=false;
- for(int j=0;j<al2.size();j++){
- Person p2=(Person)al2.get(j);
- if(p2.equals(p1))
- flag=true;
- }
- if(!flag){
- al2.add(al.get(i));
- }
- }
- }
- return al2;
- }
- }
- class Person{
- private int age;
- private String name;
- Person(){}
- Person(String name,int age){
- this.name=name;
- this.age=age;
- }
- public String getName(){
- return this.name;
- }
- public int getAge(){
- return this.age;
- }
- public boolean equals(Person per){
-
- if(this.name.equals(per.name) && this.age==per.age)
- return true;
- else
- return false;
- }
- }
复制代码 接下来是HashSetTest- class HashSetTest{
- public static void main(String[] args){
- HashSet hs=new HashSet();
- hs.add(new Person("a1",11));
- hs.add(new Person("a1",11));
- hs.add(new Person("a2",12));
- hs.add(new Person("a3",13));
- hs.add(new Person("a4",14));
- Iterator iter=hs.iterator();
- while(iter.hasNext()){
- Person p=(Person)iter.next();
- sop(p.getName()+"..."+p.getAge());
- }
- }
- public static void sop(Object obj){
- System.out.println(obj);
- }
- }
- class Person{
- private int age;
- private String name;
- Person(){}
- Person(String name,int age){
- this.name=name;
- this.age=age;
- }
- public String getName(){
- return this.name;
- }
- public int getAge(){
- return this.age;
- }
- public boolean equals(Object obj){
- Person p=(Person)obj;
- if(this.name.equals(p.name) && this.age==p.age)
- return true;
- else
- return false;
- }
- public int hashCode(){
- return name.hashCode()+age;//因为地址都相同,所以直接比较对象,而对象的方法也被重写
- }
- }
复制代码 在HashSetTest中,复写了equals方法,参数也是Obejct。如果换成了Person,就不是重写,就是重载了,所以无法取出同名同龄的Person。
而在ArrayListTest2中,我没有复写equals,而是重载了,但是却行的通,可以调用,这是为什么呢? |