首页 > 代码库 > java 16-2 ArrayList的练习2

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 }

 

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

 

java 16-2 ArrayList的练习2