soul Java开发面试题及参考答案
Java 集合有哪些?有什么区别?怎么实现的?初始大小和扩大策略是什么?
Java 集合主要包括 List、Set、Map。
List 是有序的集合,可以包含重复元素。例如 ArrayList 和 LinkedList。ArrayList 是基于数组实现的,它的查询效率高,因为可以通过数组下标直接访问元素,时间复杂度为 O (1)。在添加和删除元素时,特别是在中间位置操作,可能需要移动大量元素,时间复杂度为 O (n)。它的初始大小是 10,当元素个数超过容量时,会进行扩容,扩容策略是创建一个新的数组,其大小是原来的 1.5 倍左右,然后将原数组的元素复制到新数组。LinkedList 是基于链表实现的,它在添加和删除元素时效率较高,特别是在首尾位置操作,时间复杂度为 O (1),但查询效率相对较低,时间复杂度为 O (n)。
Set 是不包含重复元素的集合。HashSet 是基于哈希表实现的,它通过计算元素的哈希码来快速确定元素是否存在,添加、删除和查询操作的时间复杂度接近 O (1)。TreeSet 是基于红黑树实现的,元素会按照自然顺序或者指定的比较器顺序进行排序,添加、删除和查询操作的时间复杂度为 O (logn)。
Map 是用于存储键值对的集合。