`
C_SHaDow
  • 浏览: 51901 次
  • 性别: Icon_minigender_1
  • 来自: 大同
社区版块
存档分类
最新评论

Java集合框架

 
阅读更多

Java集合框架

HashMapHashSet

HashMap在底层将key-value对当成一个整体进行处理,这个整体就是一个Entry对象。HashMap底层采用一个Entry[]数组来保存所有的key-value对,当需要存储一个Entry对象时,会根据Hash算法来决定其存储位置(indexFor方法);当需要取出一个Entry时,也会根据Hash算法找到其存储位置,直接取出该Entry。由此可见,HashMap之所以能快速存、取它所包含的Entry,完全类似于现实生活中的:不同的东西要放在不同位置,需要时才能快速找到它。

当创建HashMap时,有一个默认的负载因子(load factor),其默认值为0.75。这是时间和空间成本上的一种折衷:增大负载因子可以减少Hash表(就是那个Entry数组)所占用的内存空间,但会增加查询数据的时间开销,而查询是最频繁的操作(HashMapget()put()方法都要用到查询);减小负载因子会提高数据查询的性能,但会增加Hash表所占用的内存空间。

HashSet的实现其实非常简单,它只是封装了一个HashMap对象来存储所有的集合元素。所有放入HashSet中的集合元素实际上由HashMapkey来保存,而HashMapvalue则存储了一个PERSENT,它是一个静态的Object对象。

Deque接口

在无需保证线程安全的情况下,程序完全可以使用ArrayDeque来代替Stack类。

ArrayListVector

ArrayList使用transient修饰了elementData数组。这保证系统序列化ArrayList对象时不会直接序列化elementData数组,而是通过ArrayList提供的writeObjectreadObject方法来实现定制序列化;而Vector并未完全实现定制序列化。

从序列化机制的角度看,ArrayList的实现比Vector的实现更安全;但如果从线程安全的角度看,Vector更安全。

Java提供了一个Collections工具类,通过该工具类synchornizedList方法即可将一个普通ArrayList包装成线程安全的ArrayList

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics