1.说说有哪些常见集合?
集合相关类和接口都在java.util中,主要分为3种:List(列表)、Map(映射)、Set(集)。
Java集合主要关系
其中Collection
是集合List
、Set
的父接口,它主要有两个子接口:
List
:存储的元素有序,可重复。
Set
:存储的元素不无序,不可重复。
Map
是另外的接口,是键值对映射结构的集合。
List,也没啥好问的,但不排除面试官剑走偏锋,比如面试官也看了我这篇文章。
**#2.ArrayList和LinkedList有什么区别?**
- *(1)**数据结构不同
- ArrayList基于数组实现
- LinkedList基于双向链表实现
ArrayList和LinkedList的数据结构
(2) 多数情况下,ArrayList更利于查找,LinkedList更利于增删
- ArrayList基于数组实现,get(int index)可以直接通过数组下标获取,时间复杂度是O(1);LinkedList基于链表实现,get(int index)需要遍历链表,时间复杂度是O(n);当然,get(E element)这种查找,两种集合都需要遍历,时间复杂度都是O(n)。
- ArrayList增删如果是数组末尾的位置,直接插入或者删除就可以了,但是如果插入中间的位置,就需要把插入位置后的元素都向前或者向后移动,甚至还有可能触发扩容;双向链表的插入和删除只需要改变前驱节点、后继节点和插入节点的指向就行了,不需要移动元素。