A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

集合部分,去除集合中重复的对象,为什么要在Person中重写equals方法
代码如下:
  1. package com.test2;

  2. import java.util.*;

  3. class Person{
  4.         private String name ;
  5.         private int age;
  6.         Person(String name,int age){
  7.                 this.name = name;
  8.                 this.age = age;
  9.         }
  10.         <font color="Red">public boolean equals(Object obj){
  11.                 if(!(obj instanceof Person))
  12.                         return false;
  13.                 Person p = (Person)obj;
  14.                 return this.name.equals(p.name)&&this.age==p.age;
  15.                        
  16.         }</font>
  17.         public String getName(){
  18.                 return name;
  19.         }
  20.         public int getAge(){
  21.                 return age;
  22.         }
  23. }

  24. public class CollectionDemo {

  25.        
  26.         public static void main(String[] args) {
  27.                 ArrayList al = new ArrayList();
  28.                
  29.                 al.add(new Person("lisi01",21));//add(Object obj);>>>Object obj = new Person("lisi01",21)
  30.                 al.add(new Person("lisi02",22));
  31.                 al.add(new Person("lisi04",24));
  32.                 al.add(new Person("lisi03",23));
  33.                 al.add(new Person("lisi04",24));
  34.                 al.add(new Person("lisi02",22));
  35.                 al.add(new Person("lisi04",24));
  36.                
  37.                 Iterator it = singleElement(al).iterator();
  38.                
  39.                 while(it.hasNext()){
  40.                         Person p =(Person) it.next();
  41.                         sop(p.getName()+"---"+p.getAge());
  42.                 }
  43.                
  44.                
  45.         }
  46.        
  47.         public static void sop(Object obj){
  48.                 System.out.println(obj);
  49.         }
  50.         //去除重复对象
  51.         public static ArrayList singleElement(ArrayList al){
  52.                 //定义一个临时容器
  53.                 ArrayList alNew = new ArrayList();
  54.                 Iterator it = al.iterator();
  55.                 while(it.hasNext()){
  56.                         Object obj = it.next();
  57.                         if(!alNew.contains(obj))
  58.                                 alNew.add(obj);
  59.                 }
  60.                 return alNew;
  61.         }

  62. }
复制代码



5 个回复

倒序浏览
不然就是默认方法  比较地址值的话  同名同年龄也加进去了
回复 使用道具 举报
因为ArrayList元素可以重复,既然去除重复元素就要保证对象唯一,不让同姓名同年龄就存进去,所以不能使用默认比较,要复写Object中的equals方法。
回复 使用道具 举报
途中ms前进 发表于 2015-5-23 12:23
因为ArrayList元素可以重复,既然去除重复元素就要保证对象唯一,不让同姓名同年龄就存进去,所以不能使用 ...

明白了,谢谢
回复 使用道具 举报
thoris 发表于 2015-5-23 12:15
不然就是默认方法  比较地址值的话  同名同年龄也加进去了

谢谢,明白了··
回复 使用道具 举报
ArrayList元素可以重复
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马