java容器入门了解总结

JAVA容器入门特点总结

结构图

在这里插入图片描述

List

ArrayList

特点: 有序,可重复添加数据,查询较快,底层为数组,删除\插入慢,可以为null

解析:arrayList底层为数组进行扩充,初始创建无数据时 数组大小为0,当有数据时默认初始化有10,如果再进行添加数据度不够的话会进行扩容1.5倍,再调用copy()将原数组容器进行转换到扩容好的

LinkedList

特点 : 有序,有序链表,先进先出,数据可重复,查询较慢,删除、添加较快,可以添加null

解析:linkedList 底层为双向链表方式,由下标指针进行操作数据

在这里插入图片描述

Set

hashSet

特点 : 不可重复(如重复会覆盖)、无序、线程不安全、可以为null、添加速度快 查询速度快 删除速度快

解析:hashSet是依靠 hashCode和equals来进行对比查看是否同一数据源 * 例:equals 为true两个对象内容相同,但是hashCode不同还是不会覆盖 * hashSet 是依靠hashCode来进行存储

LinkedHashSet

LinkedHashSet是hashSet的子类 链表添加数据,但依旧是按照 hashCode进行添加数据 但是是为有序的,根据添加的顺序进行

Map

Map单成一类,不继承collection

  • hashMap
    • LinkedHashMap
  • Hashtable
  • Hashtable

HashMap

特点: hashMap—key不可重复、value可重复 、无序、线程不安全、(查询、添加、删除)效率高 ,key\value均可为null
HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。

 当我们往Hashmap中put元素时,首先根据key的hashcode重新计算hash值,根绝hash值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。

Hash计算:

  • 直接定址法—a*key =h
  • 留余法 key%p = h
  • 平方法取中
  • 数值分析法(位运算)

hashCode冲突处理:

  • 开放定址法(线性探测法、平方探测)
  • 拉链法(Java中结合使用)

历史对比:

  • jdk1.8 之前使用的数组+链表的形式。如果hash冲突采用的是拉链法,(这个方式相对于会导致,数据存放堆积在链表中,数据分布不均匀,链表特性不能随机查找,就会降低查找效率)
  • 1.8之后改良使用 数组+链表+红黑树。数组初始为16 当阈值(链表)>=8 并且数组值>=64 后会进行扩容为红黑树,必须两个都满足,(因为如果不满足,数据量相对于不是太大,直接使用红黑树反而适得其反,因为红黑树的特性,会导致树进行不断的自旋操作来调整树进行维护本有的特性。),如果条件不满足,那么进行数组的扩容 加载因子为0.75. (也就是当HashMap键值对达到了原容量的75%后会进行扩容),大小为:oldSize*2,让后将原有的数据copy到新的容器中。

为什么每次扩容都是2的次幂?

因为HashMap 进行put hash运算的时候使用的是位运算,可以尽量得使数据平均的分散在数组上,尽量减少hash冲突。

Hashtable

特点: hashMap—key不可重复、value可重复 、有序、线程安全、底层有锁线程安全 效率较慢 ,key\value不可为null

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值