HashSet源码解析!
HashSet源码解析!
月伴飞鱼HashSet
HashSet原理:使用的就是组合 HashMap。
- 把 HashMap 当作自己的一个局部变量。
1 | // 把 HashMap 组合进来,key 是 Hashset 的 key,value 是下面的 PRESENT |
1、在使用 HashSet 时,比如 add 方法,只有一个入参,但组合的 Map 的 add 方法却有 key,value 两个入参。
相对应上 Map 的 key 就是我们 add 的入参,value 就是第二行代码中的 PRESENT。
- 用一个默认值 PRESENT 来代替 Map 的 Value。
2、如果 HashSet 是被共享的,当多个线程访问的时候,就会有线程安全问题,因为在后续的所有操作中,并没有加锁。
TreeSet
TreeSet底层组合的是 TreeMap,所以继承了 TreeMap key 能够排序的功能,迭代的时候,也可以按照 key 的排序顺序进行迭代。