Java集合相关知识总结

1、集合体系:如下图

        

2.ArrarList 和 LinkedList 

  (1).ArrayList 是实现了基于动态数组的数据结构,LinkedList 基于链表的数据结构。

  (2).对于随机访问 get 和 set,ArrayList 效率优于 LinkedList,因为 LinkedList 要移动指针。

  (3).对于新增和删除操作 add 和 remove,LinkedList 比较占优势,因为 ArrayList 要 移动数据。 这一点要看实际情况的。若只对单条数据插入或删除,ArrayList 的速度反而优于 LinkedList。但若是批量随机的插入删除数据,LinkedList 的速度大大优于ArrayList. 因为 ArrayList每插入一条数据,要移动插入点及之后的所有数据。

3.HashMap底层是数组+链表+红黑树,这几类结构的作用

  (1).数组 Node[] table ,哈希表,根据对象的 key 的 hash 值进行在数组里面是 哪个节点。

  (2).链表的作用是解决 hash 冲突,将 hash 值取模之后的对象存在一个链表放在 hash 值对应的槽。

  (3).红黑树 JDK8 使用红黑树来替代超过 8 个节点的链表,主要是查询性能的提升, 从原来的 O(n)到 O(logn)。

  (4).通过 hash 碰撞,让 HashMap 不断产生碰撞,那么相同的 key 的位置的链表就会不断增长,当对这个 Hashmap 的相应位置进行查询的时候,就会循环遍历这个超级大的链表,性能就会下降,所以改用红黑树。

4.HashMap 和 HashTable 区别

  (1).线程安全性不同

  HashMap 是线程不安全的,HashTable 是线程安全的,其中的方法是 Synchronized,在多线程并发的情况下,可以直接使用 HashTable,但是使用 HashMap 时必须自己增加同步处理。

  (2).是否提供 contains方法

  HashMap 只有 containsValue 和 containsKey 方法;HashTable 有 contains、 containsKey 和 containsValue 三个方法,其中 contains 和 containsValue 方法功 能相同。

  (3).key和 value是否允许null值

  Hashtable 中,key 和 value 都不允许出现 null 值。HashMap 中,null 可以作为 键,这样的键只有一个;可以有一个或多个键所对应的值为 null

  (4).数组初始化和扩容机制

HashTable 在不指定容量的情况下的默认容量为 11,而 HashMap 为 16, Hashtable 不要求底层数组的容量一定要为 2 的整数次幂,而 HashMap 则要求一 定为 2 的整数次幂

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值