坤坤背Java(集合篇)

目录

1. ArrayList和LinkedList的区别

2. HashMap底层原理

3. HashMap 的resize过程是什么样的

4. HashMap你经常用在那个地方

5. HashMap和HashTable的区别

6. List、Map、Set三个接口,存取元素时,各有什么特点

7. HashSet是如何保证元素唯一性的呢

8. TreeSet怎么对集合中的元素进行排序

9. map集合的两种取出方式

10. Collection和Collections的区别

11. ConcurrentHashMap 的工作原理及代码实现

12. HashCode的方法和作用

13. 什么是链表

14. 链表的优缺点

15. 什么是红黑树


1. ArrayList和LinkedList的区别

ArrayList查询速度快(不准确),尾部增删快,头部增删慢,随机访问速度快;LinkedList头部尾部增删快,中间不高,性能远比ArrayList查;最适合查询的是HashMap

1. 是否保证线程安全:ArrayList和LinkedList都不保证线程安全

2. 底层数据结构:ArrayList底层使用的是数组,LinkedList底层使用的是双链表

3. 插入和删除是否受元素位置的影响:ArrayList使用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响;LinkedList使用链表存储,所以插入和删除元素的时间复杂度不受元素位置的影响

4. 是否支持快速随机访问:LinkedList不支持高效的随机元素访问,ArrayList实现RandomAccess接口,支持高效的随机元素访问

5. 内存空间占用:ArrayList的空间浪费主要在结尾会预留一定的容量空间;LinkedList的每一个元素空间消耗要高于ArrayList

2. HashMap底层原理

JDK8以前:数组+双链表

JDK8以后:数组+双链表+红黑树

3. HashMap resize过程是什么样的

采用hash表数据和链表的形式,在1.8以后引入了红黑树的数据结构,初始化数组长度为16,当数组长度达到0.75时扩容,链表长度大于8时转为红黑树,红黑树长度小于6时转为链表,数组中的元素容量超过了阈值的0.75时扩容长度

4. HashMap你经常用在那个地方

1. 电子商务的应用中使用HashMap作为缓存

2. 金融领域中处于对安全的考虑经常使用HashMap和ConcurrentHashMap

3. controller层向前台返回数据时用map封装数据

4. Mybatis中的map作为参数或封装数据集

5. HashMap和HashTable的区别

1. HashMap去掉了HashTable的contains方法,但是加上了containsValue()方法和containsKey()方法

2. HashTable是同步的,而HashMap是非同步的,效率要比HashTable高

3. HashMap允许空键值,而HashTable是不允许的

6. List、Map、Set三个接口,存取元素时,各有什么特点

List存储有序,可以存储重复的元素

Map存储无序,不可以存储重复的元素

Set存储无序,一般使用键值对的形式存储,value可以多值

7. HashSet是如何保证元素唯一性的呢

是通过元素的hashCode()和equals()方法完成的

当向HashSet中添加元素是,会先根据元素的hashCode()方法返回的哈希值来确定元素在内部储存中的位置,如果该位置没有其他元素,就直接添加;如果该位置上有其他元素,就会调用元素的equals()方法来比较两个元素的内容是否相等,如果相等,则不添加该元素,否则,添加该元素到哈希表中

8. TreeSet怎么对集合中的元素进行排序

TreeSet底层是二叉树

1. 让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖comparato方法

2. 让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,覆盖compara方法

9. map集合的两种取出方式

1. 通过map.keySet先获得map集合的键,在通过键获取value值

2. 通过map.entrySet直接获取键值对

10. Collection和Collections的区别

Collention是集合类的上级接口,继承它的接口主要有list和set

Collentions是一个工具类,有很多操作集合的方法

11. ConcurrentHashMap 的工作原理及代码实现

ConcurrentHashMap引入了分割(Segment)的概念,只对Map的一部分(Segment)进行上锁,这样保证同步的时候,锁住的不是整个Map

12. HashCode的方法和作用

HashCode()的作用是获取哈希码,也称为散列码;它实际上是获取一个int整数,哈希码的作用是确定该对象在哈希表中的索引位置

不同的的对象可能会有相同的hashcode,在比较一个对象是否相等时,要先比较对象的hashcode是否相等,其次要比较equals是否相等

因此,equals方法被覆盖过,则hashCode方法也必须被覆盖,hashCode()的默认行为是对堆上的对象产生独特值,如果没有重写hashCode(),则该class的两个对象无论如何也不会相等

13. 什么是链表

链表是可以将物理地址上不连续的数据连接起来,通过指针对物理地址进行操作,实现增删改查等功能

链表大致分为单链表和双链表

单链表:每个节点包含两部分,一部分存放数据变量的data,另一部分是指向下一个节点的next指针

双链表:除了包含单链表的部分,还增加了pre前一个节点的指针

14. 链表的优缺点

优点:

1. 插入、删除速度快(因为有next指针指向其下一个节点,通过改变指针的方向可以提高增加、删除元素的效率)

2. 内存利用率高,不会浪费内存(可以使用内存中细小的不连续空间(大于node节点的大小),在需要空间的时候才创建空间)

3. 大小没有固定,拓展很灵活

缺点:不能随机查找,必须从第一个开始遍历,查询效率非常的低

15. 什么是红黑树

红黑树是一种含有红黑节点的能自平衡的二叉查找树,它必须有以下性质:

1. 它的每个节点要么是红色,要么是黑色

2. 根节点是黑色的

3. 每一个叶子节点都是黑色

4. 每一个红色节点下的两个子节点一定都是黑色节点

5. 任意一个节点到每个叶子节点的路径下都有相同数量的黑色节点

持续更新中......

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值