Java集合相关问题
List,Set,Map区别
描述
- List(顺序):List接口存储一组不唯一(可以多个元素引用相同对象),有序的对象。
- Set(注重独一无二):元素不可重复,不会多个元素引用相同对象。
- Map(Key来搜索):键值对存储。Map会维护与Key有关联的值,两个Key可以引用相同的对象,Key不可重复。
ArrayList和LinkedList区别
- 是否保证线程安全:ArrayList 和LinkedList都是不同步的,线程不安全。
- 底层数据结构:ArrayList底层用的Object数组;LinkedList底层使用双向链表数据结构(JDK1.6之前为循环链表,JDK1.7取消循环)
- 插入和删除是否受元素位置影响:
- ArrayList采用数组存储,所以插入和删除元素时间复杂度收到元素位置影响。add(E e),会把元素追加到列表末尾,O(1);若在指定
i
处插入或删除,(add(int index,E element)),O(n-i),因为在进行操作时候,集合中第i和第i个元素之后的(n-i)个元素都要执行向后/向前移一位的操作。 - LinkedList采用链表存储,碎玉add(E e)方法插入删除,时间复杂度都近似O(1),如果要在指定位置i插入和删除元素,O(n)。
- ArrayList采用数组存储,所以插入和删除元素时间复杂度收到元素位置影响。add(E e),会把元素追加到列表末尾,O(1);若在指定
- 插入和删除是否受元素位置影响: