Java中的Set

发布时间:2019-11-17 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Java中的Set脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Set接口的实现类

HashSet与LinkedHashSet

HashSet与LinkedHashSet的关系就如同HashMap和LinkedHashMap一样。HashSet内部保存了一个HashMap对象来存储。

set-1

利用Map对象,存入Map的k-v中value对象始终是同一个对象(就是上图中声明的PRivate static final Object PRESENT = new Object()对象)。从而Set只需要关心key对象即可。

set-2

  1. 很显然,Set存储的key集合是无序的。默认大小就是hashmap的默认大小16。每一次扩容也是2的倍数递增。
  2. 上面的第2张图示HashSet的构造方法之一,可以看到是生成了一个LinkedHashMap,下面的LinkedHashSet就是调用这个构造方法来生成的。

Java中的Set

LinkedHashSet则是继承自HashSet,并且在生成的时候,调用了父类HashSet的对应的方法,从而维护了一个LinkedHashMap对象,就实现了元素有序。

  1. 上图可以看到,LinkedHashSet构造方法都是调用了父类中含有dummy参数的那一个构造方法(也就是维护LinkedHashMap的那一个!)

TreeSet

显然,TreeSet内部也是维护了TreeMap来存储元素。只保存key,而value值都是同一个Object对象。

Java中的Set

  1. Set对于的并发类有:java.util.concurrent.CopyOnWrITeArraySet类和Collections.synchronizedSet(Set set)所修饰的类。
  2. 这2个并发类的区别和List对应的并发类的区别是一致的。前者是写时复制,只保证数据最终的一致性,而不保证数据实时的一致性。后者借助synchronized关键字修饰代码块,尽量减小了锁的粒度。

Set类图

Java中的Set

脚本宝典总结

以上是脚本宝典为你收集整理的Java中的Set全部内容,希望文章能够帮你解决Java中的Set所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。