目录
6. List、Map、Set三个接口,存取元素时,各有什么特点
11. ConcurrentHashMap 的工作原理及代码实现
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过程是什么样的
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. 任意一个节点到每个叶子节点的路径下都有相同数量的黑色节点
持续更新中......