HashSet源码阅读理解

HashSet源码阅读理解

特点

1、hashset数据结构:每个存储的数据对应一个对象(Object),存储的数据作为key
2、用于存储不重复的数据;
3、内部维护一个hashmap
4、无序
5、线程不安全

源码理解:

demo:

public class HashSetDemo {

    public static void main(String[] args) {
    	test();
    }

    public static void test(){
        HashSet<String> set =  new HashSet<>();
        set.add("1");
        set.add("2");
        set.add("3");
    }

}

1、创建HashSet源码:
在这里插入图片描述
map为全局变量,被transient关键字修饰表示HashSet序列化的时候这个map属性不会被序列化到其对象内;(对transient有疑问可以自行实验);
在这里插入图片描述
由此,创建一个HashSet的时候只干了一件事,初始化HashSet内部的一个HashMap类型的全局属性;即HashSet内部维护一个HashMap;
2、add()方法:
在这里插入图片描述
直接将add()中的参数放入map中,注意此处将需要添加的值当作hashmap的key存入;而value则是一个全局属性PRESENT,看下这个PRESENT是什么:
在这里插入图片描述
PRESENT是一个静态的final对象;
由此可知,调用add()方法往HashSet中添加数据等同于将数据作为key、一个Object对象作为value存入一个HashMap中;
因为调用HashMap的put方法时如果key已经存在则更新其value;且HashMap本身就线程不安全;
到这其实HashSet的五个特点都已经验证了;下面看下其他几个常用的方法:
3、contains()方法:
在这里插入图片描述
调用HashMap的containsKey方法判断数据是否存在
4、remove()方法:
在这里插入图片描述
调用HashMap的remove方法删除数据
5、iterator()方法:
在这里插入图片描述
返回map中key的迭代器

总结:HashSet其实就是稍微改造了一下HashMap,把要存的数据当作key用一个静态final对象充当value;底层原理其实都是HashMap实现的,看完HashMap再看HashSet简单的不要不要;
->HashMap源码阅读理解


posted @   有锦  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示