Java集合中的各种区别(面试题)
目录
1.ArrayList和LinkedList区别
- 两个都是List的接口,都是非线程安全的
- ArrayList是基于动态数组的数据结构,而LinkedList是基于链表的数据结构
- 对于随机访问get和set(查询操作),ArrayList要优于LinkedList,因为LinkedList要移动指针
- 对于增删操作(add和remove),LinkedList优于ArrayList
2.Map面试题
- HashMap和TreeMap应该怎么选择
- HashMap可实现快速存储和检索,但缺点是包含的元素是无序的,适用于在Map中插入、删除和定位元素
- TreeMap能便捷的实现对其内部元素的各种排序,但其一般性能比HashMap差,适用于按自然顺序或自定义顺序遍历键(key)
- jdk1.7和jdk1.8中HashMap的主要区别
- 底层实现由之前的“数组+链表”改为“数组+链表+红黑树”
- jdk1.8中,当链表节点较少时仍然以链表存在,当链表节点较多时,默认是大于8时会转为红黑树,代码如下
![]()
3.HashSet和TreeSet区别
- HashSet不能保证元素的排列顺序,TreeSet是SortedSet接口的唯一实现类,可以确保集合元素处于排序状态
- HashSet底层用的是哈希表,TreeSet采用的数据结构是红黑树(红黑树是一种特定类型的二叉树)
- HashSet中元素可以是null,但只能有一个,TreeSet不允许放入null
- 一般使用HashSet,如果需要排序的功能时,才使用TreeSet(性能原因)
4.当向集合中插入对象时,如何判别在集合中是否已经存在该对象,比如Set确保存储对象的唯一,并判断是不是同个对象呢?
- 依据hashCode()和equals()进行判断,所以Set存储的对象必须重写这两个方法
- 判断两个对象是否一样,首先判断插入obj的hashcode值是否存在,hashcode值不存在则直接插入集合,值存在则还需判断equals方法判断对象是否相等

浙公网安备 33010602011771号