所有分类
  • 所有分类
  • 未分类

ArrayList与LinkedList以及List与数组、Set的区别

简介

本文介绍Java的List的一些对比,包括:Array与ArrayList区别、ArrayList与LinkedList异同、List与Set区别。

ArrayList与LinkedList异同

相同点

  1. 线程安全:都是线程不安全的
  2. 顺序:都是按照存入的顺序取出

不同点

ArrayListLinkedList
实现方式基于数组。基于链表。
随机访问支持随机访问。(实现了RandomAccess 接口)不支持随机访问。
插入效率插入效率比较低(需要扩容时效率会变低)。插入效率比较高(删除不一定高)。
时间复杂度get(int index)              :O(1)
add(E) (加到末尾) :O(1)
add(index, E)             :O(n) 后边元素需移动
remove(Object)          :O(n)
get(int index)            :O(n)
add(E) (加到末尾):O(1)
add(index, E)            :O(n) 需要先查找到第几个元素
remove(Object)         :O(n)
使用场景随机访问的场景。插入很频繁的场景 用作:栈、队列或双向队列

List与Set区别

ListSet
重复允许重复的对象(多个null也可以)不允许重复的对象(null也只能有一个)
有序性有序的。 保持了每个元素的插入顺序。即输出顺序就是输入顺序。有序和无序都有。 HashSet:无法保证每个元素的存储顺序。 LinkedHashSet:按插入顺序存放。

数组与ArrayList区别

相同点

  1. 都具有索引(index)。即:可以通过index来直接获取和修改任意项。
  2. 他们所创建的对象都放在堆中。
  3. 都能够对自身进行枚举(因为都实现了IEnumerable接口)。

不同点

数组(Array)ArrayList
数据类型可以是基本类型或对象类型。只能是对象类型。
大小大小是固定的,Array对象的初始化必须指定大小大小是动态的
数据存放连续存放对象的引用是连续的,但对象本身在内存中的位置不一定连续。
插入与删除不能够添加和删除其中的项可以在任意位置插入和删除项。
效率

16

评论8

请先

  1. Array数据存放 如果存储的是对象类型的话 应该也是对象的引用是连续的,但对象本身在内存中的位置不一定连续吧?
    LuckyAura 2024-04-11 0
  2. 数组与ArrayList区别的第三点是不是不太对?
    107y 2024-03-08 0
    • 可能描述的不够精确。我修正了一下。
      自学精灵 2024-03-08 0
  3. 数组不能添加和删除吗
    木秦山支 2024-01-29 0
    • 数组大小是确定的,只能给项赋值,不能删除这一项或者添加一项。
      自学精灵 2024-01-30 0
  4. 数组的类型可以是基本数据类型或者引用类型的一种
    xiaodu 2023-08-03 2
    • 是的,文章描述可能有些歧义,已修正。
      自学精灵 2023-08-03 2
显示验证码
没有账号?注册  忘记密码?

社交账号快速登录