ArrayLIst、HashMap

底层维护了一个Objec的数组,创建对象时,初始大小是0,第一次新增元素时扩容为10,再次扩容为1.5倍,扩容的时机是内部数组满了之后,再次add才会扩容。

非线程安全,线程安全的Vector。

HashMap
jdk7以前为数组+链表,搜索的时间复杂度为N,为头插法(可能出现死循环)
jdk8为数组+链表+红黑树,搜索的时间复杂度为log(n),为尾差法。
链表长度超过8,并且数据总量超过 64 会转为红黑树、

为什么 HashMap 用红黑树而不是平衡二叉树
红黑树和平衡二叉树的区别在于它们的平衡强弱不同:

平衡二叉树是一种完全平衡的状态,它的任何结点的左右子树的高度差不会超过 1,结点是很平均分配的;
红黑树让整个树最长路径不会超过最短路径的 2 倍。这样的话,红黑树虽然牺牲了一部分查找的性能效率,但是能够换取一部分维持树平衡状态的成本。

hashmap初始大小是0,第一次新增元素时数组扩容为16,超过阈值时数组扩容一倍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值