需求:去除集合中自定义对象的重复值(对象的成员变量值都相同
注意:
我们按照和字符串一样的操作,发现出问题了。
为什么呢?
我们必须思考哪里会出问题?
通过简单的分析,我们知道问题出现在了判断上。
而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。
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()+" "+a.getAge()); 98 99 } 100 101 102 103 104 105 } 106 107 }