Set接口-HashSet

介绍存储机制:

Set: 集,无序保存,数据不能重复;具体的实现类HashSet

image

 

 常用方法:

 1 import java.util.ArrayList;
 2 import java.util.HashSet;
 3 
 4 public class DemoClass4HashSet {
 5     public static void main(String[] args) {
 6         //TODO Set接口,实现类:HashSet
 7         /*
 8         *
 9         * */
10 
11 /*        HashSet hashSet = new HashSet();
12         hashSet.add("zhagnsan");
13         hashSet.add("zhagnsan");
14         hashSet.add("lisi");
15         hashSet.add("wangwu");
16 
17         System.out.println(hashSet);  //结果还是:[lisi, zhagnsan, wangwu]*/
18 
19         HashSet hashSet = new HashSet();
20         hashSet.add("zhagnsan");
21         hashSet.add("lisi");
22         hashSet.add("wangwu");
23         //System.out.println(hashSet);  //[lisi, zhagnsan, wangwu]
24 
25         /*
26         * 1. 增删改查
27         * */
28         /*//TODO 修改数据,不能修改,因为通过哈希函数计算的内存位置不确定,如果真的要修改,只能“先删除,在新增”
29 
30         //TODO “先删除,在新增”来实现修改数据
31         hashSet.remove("lisi");
32         System.out.println(hashSet); //[zhagnsan, wangwu]
33 
34         //查询,不能通过索引来查询,真的要查询,只能通过遍历方法
35         System.out.println("--------------");
36         for (Object o : hashSet) {
37             System.out.print(o+","); //zhagnsan,wangwu,
38         }*/
39 
40         /*
41         * 2.常用方法
42         * */
43         HashSet hashSet1 = new HashSet();
44         ArrayList arrayList = new ArrayList();
45         arrayList.add("zhangsan");
46         arrayList.add("wangwu");
47         arrayList.add("lisi");
48         
49         hashSet1.addAll(arrayList);
50         System.out.println(hashSet1); //[lisi, zhangsan, wangwu]
51 
52         Object[] array = hashSet.toArray();
53         System.out.println(hashSet1.isEmpty()); //false
54         //hashSet1.clear();
55         System.out.println(hashSet1.contains("lisi")); //true
56         System.out.println(hashSet1.size()); //3
57         Object clone = hashSet1.clone();
58         System.out.println(clone);  //[zhangsan, lisi, wangwu]
59     }
60 }

 

重复数据:

 1 import java.util.HashSet;
 2 
 3 public class DemoClass4HashSetData {
 4     public static void main(String[] args) {
 5         //TODO HashSet
 6         //底层存储结构:数组+链表
 7 
 8         HashSet hashSet = new HashSet();
 9 
10         User16 u1 = new User16();
11         u1.id = 100;
12         u1.name = "zhangsan";
13         hashSet.add(u1);
14         //获取对象的哈希函数,相当于内存地址了
15         System.out.println("u1的哈希值:"+u1.hashCode()); //1694819250
16                                                         //2. 通过重写方法,来自定义实现hashCode相等  100
17         User16 u2 = new User16();
18         u2.id = 100;
19         u2.name = "zhangsan";
20         hashSet.add(u2);
21         System.out.println("u2的哈希值:"+u2.hashCode()); //1365202186
22                                                         //2. 通过重写方法,来自定义实现hashCode相等  100
23 
24         User16 u3 = new User16();
25         u3.id = 101;
26         u3.name = "lisi";
27         hashSet.add(u3);
28 
29         System.out.println(hashSet); //[[101    lisi], [100    zhangsan], [100    zhangsan]]  虽然u1 和 u2 属性值一样,
30                                      // 但是HashSet保存的是对象的内存地址,索引经过哈西函数计算,值是不一样的
31 
32         //2. 通过重写方法,来自定义实现hashCode相等
33         System.out.println(hashSet); //[[100    zhangsan], [101    lisi]]
34     }
35 }
36 
37 class User16{
38     public int id;
39     public String name;
40 
41     @Override
42     public String toString() {
43         return "["+id + "\t" + name+"]";
44     }
45 
46     //2. 通过重写方法,来自定义实现hashCode相等
47     @Override
48     public int hashCode() {
49         //return super.hashCode();
50         return id;
51     }
52 
53     @Override
54     public boolean equals(Object obj) {
55         //return super.equals(obj);
56         if(obj instanceof User16){
57             User16 u = (User16)obj;
58             if(u.id == id){
59                 if(u.name.equals(name)){
60                     return true;
61                 }
62             }
63         }
64         return false;
65     }
66 }

 

posted @ 2025-10-20 10:28  字节虫  阅读(11)  评论(0)    收藏  举报