标签:
需求:去除集合中自定义对象的重复值(对象的成员变量值都相同
注意:
我们按照和字符串一样的操作,发现出问题了。
为什么呢?
我们必须思考哪里会出问题?
通过简单的分析,我们知道问题出现在了判断上。
而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。
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 }
/* 需求:去除集合中自定义对象的重复值(对象的成员变量值都相同) 注意: 我们按照和字符串一样的操作,发现出问题了。 为什么呢? 我们必须思考哪里会出问题? 通过简单的分析,我们知道问题出现在了判断上。 而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。 contains()方法的底层依赖的是equals()方法。 而我们的学生类中没有equals()方法,这个时候,默认使用的是它父亲Object的equals()方法 Object()的equals()默认比较的是地址值,所以,它们进去了。因为new的东西,地址值都不同。 按照我们自己的需求,比较成员变量的值,重写equals()即可。 自动生成即可。 分析: A:创建动物类 B:创建一个含有动物类对象元素的集合 C:创建一个空集合 D:对动物类集合进行遍历,以及把遍历的元素放入空集合中,但要进行判断:空集合中是否含有这个元素 a:若有,则不放入 b:若没有,则放进去 E:对新的空集合进行遍历,输出 */package cn_ArrayList;
import java.util.ArrayList;import java.util.Iterator;public class AnimalDemo {
public static void main(String[] args) {//创建集合ArrayList al = new ArrayList();//定义成员对象Animal a1 = new Animal("猫", 2);Animal a2 = new Animal("荷兰猪", 1);Animal a3 = new Animal("老鹰", 4);Animal a4 = new Animal("鹦鹉", 2);Animal a5 = new Animal("警犬", 3);Animal a6 = new Animal("荷兰猪", 1);Animal a7 = new Animal("猫", 3);Animal a8 = new Animal("老鹰", 4);//把成员对象添加进集合中al.add(a1);al.add(a2);al.add(a3);al.add(a4);al.add(a5);al.add(a6);al.add(a7);al.add(a8);//创建新的空集合ArrayList alt = new ArrayList();
//遍历第一个集合for(int x = 0; x < al.size(); x++){Animal a = (Animal)al.get(x);//判断空集合中是否包含这个元素if(!alt.contains(a)){alt.add(a);}}//对第二个集合进行遍历输出,使用迭代器Iterator it = alt.iterator();while(it.hasNext()){Animal a = (Animal)it.next();System.out.println(a.getName()+"\t"+a.getAge());}}}
标签:
原文地址:http://www.cnblogs.com/LZL-student/p/5898276.html