java 16-2 ArrayList的练习2

     需求:去除集合中自定义对象的重复值(对象的成员变量值都相同

 注意:

 我们按照和字符串一样的操作,发现出问题了。

  为什么呢?

 我们必须思考哪里会出问题?

  通过简单的分析,我们知道问题出现在了判断上。

  而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。

  contains()方法的底层依赖的是equals()方法。

  而我们的学生类中没有equals()方法,这个时候,默认使用的是它父亲Object的equals()方法

 Object()的equals()默认比较的是地址值,所以,它们进去了。因为new的东西,地址值都不同。

  按照我们自己的需求,比较成员变量的值,重写equals()即可。

  自动生成即可。

 

 分析:

 A:创建动物类

 B:创建一个含有动物类对象元素的集合

 C:创建一个空集合

 D:对动物类集合进行遍历,以及把遍历的元素放入空集合中,但要进行判断:空集合中是否含有这个元素

 a:若有,则不放入

 b:若没有,则放进去

 E:对新的空集合进行遍历,输出

 

  1 package cn_ArrayList;
  2 
  3 
  4 
  5 import java.util.ArrayList;
  6 
  7 import java.util.Iterator;
  8 
  9 public class AnimalDemo {
 10 
 11 
 12 
 13     public static void main(String[] args) {
 14 
 15         //创建集合
 16 
 17         ArrayList al = new ArrayList();
 18 
 19         
 20 
 21         //定义成员对象
 22 
 23         Animal a1 = new Animal("猫", 2);
 24 
 25         Animal a2 = new Animal("荷兰猪", 1);
 26 
 27         Animal a3 = new Animal("老鹰", 4);
 28 
 29         Animal a4 = new Animal("鹦鹉", 2);
 30 
 31         Animal a5 = new Animal("警犬", 3);
 32 
 33         Animal a6 = new Animal("荷兰猪", 1);
 34 
 35         Animal a7 = new Animal("猫", 3);
 36 
 37         Animal a8 = new Animal("老鹰", 4);
 38 
 39         
 40 
 41         //把成员对象添加进集合中
 42 
 43         al.add(a1);
 44 
 45         al.add(a2);
 46 
 47         al.add(a3);
 48 
 49         al.add(a4);
 50 
 51         al.add(a5);
 52 
 53         al.add(a6);
 54 
 55         al.add(a7);
 56 
 57         al.add(a8);
 58 
 59         
 60 
 61         //创建新的空集合
 62 
 63         ArrayList alt = new ArrayList();
 64 
 65 
 66 
 67         //遍历第一个集合
 68 
 69         for(int x = 0; x < al.size(); x++){
 70 
 71             Animal a = (Animal)al.get(x);
 72 
 73             
 74 
 75             //判断空集合中是否包含这个元素
 76 
 77             if(!alt.contains(a)){
 78 
 79                 alt.add(a);
 80 
 81             }
 82 
 83         }
 84 
 85         
 86 
 87         //对第二个集合进行遍历输出,使用迭代器
 88 
 89         Iterator it = alt.iterator();
 90 
 91         
 92 
 93         while(it.hasNext()){
 94 
 95             Animal a = (Animal)it.next();
 96 
 97             System.out.println(a.getName()+"\t"+a.getAge());
 98 
 99         }
100 
101         
102 
103     
104 
105     }
106 
107 }

 

posted @ 2016-09-22 22:49  卡拉瓦  阅读(215)  评论(0编辑  收藏  举报