集合框架-ArrayList练习(去除ArrayList集合中的重复元素)

 1 package cn.itcast.p3.arraylist.test;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 
 6 import com.sun.org.apache.bcel.internal.generic.NEW;
 7 
 8 import cn.itcast.p.bean.Person;
 9 import cn.itcast.p4.hashset.demo.HashSetDemo;
10 
11 /*
12  * 定义功能去除ArrayList中的重复元素
13  */
14 public class ArrayListTest2 {
15 
16     public static void main(String[] args) {
17         // TODO Auto-generated method stub
18         
19         ArrayList al = new ArrayList();
20         al.add(new Person("list1",21));
21         al.add(new Person("list2",22));
22         al.add(new Person("list3",23));
23         al.add(new Person("list4",24));
24         al.add(new Person("list4",24));
25         al.add(new Person("list4",24));
26         
27         System.out.println(al);
28         
29         al = getSingleElement(al);
30         
31         System.out.println(al);
32         
33 //        System.out.println(al.remove(new Person("list2",22)));//remove 也是和equals相关
34         
35 //        System.out.println(al);
36         
37 //        singleDemo();
38     }
39     
40     private static ArrayList getSingleElement_2(ArrayList al) {
41         // TODO Auto-generated method stub
42         return null;
43     }
44 
45     /**
46      * 
47      */
48     public static void singleDemo() {
49         ArrayList al = new ArrayList();
50         al.add("abc1");
51         al.add("abc2");
52         al.add("abc2");
53         al.add("abc1");
54         al.add("abc");
55         System.out.println(al);
56         al = getSingleElement(al);
57         System.out.println(al);
58         
59         
60     }
61     public static ArrayList getSingleElement(ArrayList al) {
62         //1,定义一个临时容器
63         ArrayList temp = new ArrayList();
64         
65         //2,迭代al集合
66         Iterator it = al.iterator();
67         
68         while(it.hasNext()) {
69             Object obj = it.next();
70             //3,判断被迭代到的元素是否在临时容器存在。
71             if (!temp.contains(obj)) {//contains也是依据equals,如果person类equals没有重写,比较的还是地址值
72                 temp.add(obj);
73             }
74         }
75         
76         return temp;
77     }
78 
79     
80 
81 }
View Code
 1 package cn.itcast.p.bean;
 2 
 3 public class Person {
 4     private String name;
 5     private int age;
 6     
 7     
 8     public Person() {
 9         super();
10         // TODO Auto-generated constructor stub
11     }
12     public Person(String name, int age) {
13         super();
14         this.name = name;
15         this.age = age;
16     }
17     
18     @Override
19     public int hashCode() {
20         System.out.println(this+".....hashCode");
21         // TODO Auto-generated method stub
22         return name.hashCode()+age*27;//age后面乘以一个数增大离散程度,减少返回哈希值相等的几率
23                                     //好比张三哈希值20 年龄40  李四哈希值30,年龄30 结果哈希值一样
24                                     //乘一个数后就不一样了离散程度变大了
25         
26         
27         //return 100;//会比较equals
28     }
29     public boolean equals(Object obj) {
30         //健壮性
31         if (this == obj) {//有可能传入相同的对象,可以先行判断是否为同一对象add(p) add(p)这种传入两次
32             return true;
33         }
34         if (!(obj instanceof Person)) {//判断是否为Person类型,类型不一致也不应该传入
35             throw new ClassCastException("类型错误");
36         }
37         
38 //        System.out.println(this+"...equals...."+obj);
39         Person p = (Person)obj;
40         
41         
42         return this.name.equals(p.name) && this.age == p.age;
43     }
44     public String getName() {
45         return name;
46     }
47     public void setName(String name) {
48         this.name = name;
49     }
50     public int getAge() {
51         return age;
52     }
53     public void setAge(int age) {
54         this.age = age;
55     }
56     //ctrl+alt+s 快捷构造set,get方法 初始化等
57     public String toString() {
58         return name+":"+age;
59     }
60 }
Person

 

posted @ 2021-10-23 18:05  doremi429  阅读(19)  评论(0编辑  收藏  举报