黑马程序员__ ArrayList 与HashSet 去除重复函数的 区别 equals (面试有考,重点)

<span style="font-size:14px;">ArrayList中
 


[java] view plaincopy
01.package day14;  
02.  
03.import java.util.ArrayList;  
04.import java.util.Iterator;  
05.  
06./* 
07.将自定义对象作为元素存到ArrayList集合中,并去除从父元素。 
08.比如:存人对象。同姓名同年龄,视为同一个人,为重复元素。 
09. 
10.思路: 
11.1,对人的描述,将数据封装进人对象。 
12.2,定义容器,将人存入。 
13.3,取出 
14. 
15. 
16.结论 List 集合判断元素是否相同 ,依据的是元素equals方法 
17.*/  
18.  
19.  
20.//人的描述  类  
21.class Person{  
22.    private String name;  
23.    private int age ;  
24.      
25.      
26.    //构造器  
27.    Person(String name, int age){  
28.        this.name = name;  
29.        this.age = age;  
30.        }  
31.    public boolean equals(Object obj){  
32.          
33.          
34.        if(!(obj instanceof Person))  
35.            return false;  
36.              
37.            Person p = (Person)obj;  
38.            System.out.println(this.name+";;;;;;"+p.name);  
39.              
40.            return this.name.equals(p.name)&&this.age==p.age;  
41.        }  
42.    //获取  
43.    public String getName(){  
44.        return name;  
45.          
46.    }  
47.      
48.    public int getAge(){  
49.        return age;  
50.          
51.    }  
52.      
53.}  
54.  
55.  
56.public class ArrayListTest2 {  
57.  
58.    public static void sop(Object obj){  
59.        System.out.println(obj);  
60.    }  
61.    public static void main(String[] args) {  
62.//定义一个 集合容器  
63.        ArrayList al = new ArrayList();  
64.          
65.        //外部 描述类  给容器添加   元素的格式〉〉〉〉〉〉〉〉找 构造器  
66.        al.add(new Person("lisi01", 30));  
67.        al.add(new Person("lisi02", 32));  
68.        al.add(new Person("lisi02", 32));  
69.        al.add(new Person("lisi03", 33));  
70.        al.add(new Person("lisi04", 32));  
71.        al.add(new Person("lisi04", 32));  
72.        al.add(new Person("lisi05", 35));  
73.          
74.        al = singleElment( al);  
75.        //遍历取出  
76.        Iterator it = al.iterator();  
77.        while(it.hasNext()){  
78.            //因为a1.add(Object obj);  
79.            //Object obj = new Person("lisi01",30);   返回值提升了 为Object   
80.            Person  p=(Person)it.next();//〉〉〉〉〉〉所以要强转  
81.            sop(p.getName()+",,,,,"+p.getAge());  
82.        }  
83.          
84.          
85.    }  
86.    //唯一元素的 方法  
87.    public static ArrayList singleElment(ArrayList a1){  
88.        //定义一个临时容器  
89.        ArrayList newA1 = new ArrayList();  
90.        //遍历老集合  
91.        Iterator it =a1.iterator();  
92.          
93.        while (it.hasNext()){  
94.            Object obj = it.next();//为什么要obj一下呢????  拿下一个元素用obj记下来  
95.            //判断一下   如果不包含下面的一个元素  就往容器集合里面添加元素  
96.            if(!newA1.contains(obj))//——————————————————————List---中用contains内部调用equals  
97.                newA1.add(obj);  
98.              
99.        }  
100.        return newA1;  
101.    }  
102.      
103.  
104.}  
 

 
 
HashSet 

 
 


[java] view plaincopy
01.package day14;  
02.  
03.import java.util.HashSet;  
04.import java.util.Iterator;  
05.  
06./*王hashset集合中存入自定义对象 
07.姓名和年龄视为同一个人,重复元素*/  
08.  
09.  
10.  
11./*HashSet 和Arraylisht 中 equals的区别 〉〉〉〉〉〉〉〉〉〉〉〉〉??????? 
12.        首先Set存储时无序不可重复的,List是有序可重复的 
13.        List---中用contains内部调用equals 
14.        Set----中使用的equals方法是其存入的类(Person或其他)的重写的equals,hashCode方法*/  
15.public class HashSetTest {  
16.  
17.    public static void sop(Object obj){  
18.        System.out.println(obj);  
19.    }  
20.  
21.    public static void main(String[] args) {  
22.        HashSet hs = new HashSet();  
23.          
24.        hs.add(new Person("a1",11));  
25.        hs.add(new Person("a2",12));  
26.        hs.add(new Person("a3",13));  
27.        hs.add(new Person("a4",14));  
28.        hs.add(new Person("a1",11));  
29.        hs.add(new Person("a2",13));  
30.          
31.        Iterator it =hs.iterator();  
32.          
33.        while(it.hasNext()){  
34.            Person  p=(Person)it.next();//〉〉〉〉〉〉所以要强转>>>>看ArrayListTest2  
35.            sop(p.getName()+",,,,,"+p.getAge());  
36.        }  
37.    }  
38.  
39.}  
40.class Person{  
41.    private String name;  
42.    private int age ;  
43.      
44.      
45.    //构造器  
46.    Person(String name, int age){  
47.        this.name = name;  
48.        this.age = age;  
49.        }  
50.      
51.    public int hashCode(){  
52.        //验证  
53.        System.out.println(this.name+".....hashCode");  
54.          
55.        //return 60;  
56.        //为提高效率 返回name.hashCode()+age;  
57.        //return name.hashCode()+age;  20+30=30+20  总hash值有可能相同   为了尽量保持返回的哈希值 唯一性    随便乘以一个数  
58.        return name.hashCode()+age*39;  
59.    }  
60.    //hashset  判断  
61.    public boolean equals(Object obj){  
62.          
63.          
64.        if(!(obj instanceof Person))  
65.            return false;  
66.              
67.            Person p = (Person)obj;  
68.            System.out.println(this.name+";;;equals;;;"+p.name);  
69.              
70.            return this.name.equals(p.name)&&this.age==p.age;  
71.        }  
72.    //获取  
73.    public String getName(){  
74.        return name;  
75.          
76.    }  
77.      
78.    public int getAge(){  
79.        return age;  
80.          
81.    }  
82.      
83.}  
</span>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值