关于java集合的实现细节

集合元素在内存中的存储机制!!!!!!!

hashmap的hash存储机制,treemap的红黑树存储机制,hashset的底层就是hashmap,treeset的底层就是treemap,arraylist数组存储机制,linkedlist链表存储机制,

map-------entry----hashmap/hashset   treemap/treeset

hashmap使用hash表+链表来存储关联数组,hashmap中有一个内部类Entry(key-value),hash表+链表存储的就是一个个entry实例,将所有的entry实例的value置为null,则hashmap变为hashset。存储entry实例时,只是根据key的hashcode值来决定存储位置。hash表的桶中存放的是Entry实例啊,当hashmap的每个桶中之存储一个entry时,即没有通过指针产生Entry链时,hashmap具有最好的性能。在发生hash冲突时,单个bucket中存储的时一个entry链,。

hashset的实现只是封装了一个hashmap对象来存储所有的集合元素,所有放入hashset中的元素实际上都是由hashmap的key来保存,而hashmap的value只是存储了一个静态的Object对象

hashmap底层

hashmap在底层使用key-value对当成一个整体进行处理,这个整体就是一个entry对象,hashmap底层使用一个entry数组来保存所有的key-value对,当需要存储一个entry对象时,会根据hash算法来决定其存储位置,当需要取出一个entry时,也会根据hash算法来找到其存储位置,

当创建hashmap时,有一个默认的负载因子,默认值为0.75,。负载因子是时间和空间上的折中,负载因子大,则hash表占内存空间小,查询时间大,负载因子小,则hash表占内存空间大,查询时间小,

------------------------------------

treemap,每个entry都被当成一个红黑树节点来对待,,treemap中的所有entry总是按key的排列顺序来保持有序状态,

红黑树==自平衡二叉查找树

list-----arraylist/linkedlist/vector/stack

arraylist底层用数组实现存储,线程不安全

linkedlist底层使用双向链表来实现存储,线程不安全

vector/stack底层用数组实现存储,,线程安全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值