Loading

List实现类

1、ArrayList

  • ArrayList 是 List 接口的典型实现类、主要实现类
  • 本质上,ArrayList是对象引用的一个”变长”数组
  • ArrayList的JDK1.8之前与之后的实现区别?
    • JDK1.7:ArrayList像饿汉式,直接创建一个初始容量为10的数组
    • JDK1.8:ArrayList像懒汉式,一开始创建一个长度为0的数组,当添加第一个元 素时再创建一个始容量为10的数组
  • Arrays.asList(…) 方法返回的 List 集合,既不是ArrayList 实例,也不是 Vector 实例。Arrays.asList(…) 返回值是一个固定长度的 List 集合

2、LinkedList

  • 对于频繁的插入或删除元素的操作,建议使用LinkedList类,效率较高
  • 新增方法:
    • void addFirst(Object obj)
    • void addLast(Object obj)
    • Object getFirst()
    • Object getLast()
    • Object removeFirst()
    • Object removeLast()
  • LinkedList:双向链表,内部没有声明数组,而是定义了Node类型的first和last, 用于记录首末元素。同时,定义内部类Node,作为LinkedList中保存数据的基本结构。Node除了保存数据,还定义了两个变量:
    • prev变量记录前一个元素的位置
    • next变量记录下一个元素的位置

3、Vector

  • Vector 是一个古老的集合,JDK1.0就有了。大多数操作与ArrayList 相同,区别之处在于Vector是线程安全的
  • 在各种list中,最好把ArrayList作为缺省选择。当插入、删除频繁时, 使用LinkedList;Vector总是比ArrayList慢,所以尽量避免使用
  • 新增方法:
    • void addElement(Object obj)
    • void insertElementAt(Object obj,int index)
    • void setElementAt(Object obj,int index)
    • void removeElement(Object obj)
    • void removeAllElements()

4、各自的特点

  1. ArrayList和LinkedList的区别

    二者都线程不安全,相对线程安全的Vector,执行效率高。

    ArrayList基于动态数组,对于随机访问,ArrayList优于LinkedList,因为LinkedList要移动指针

    LinkedList基于双向链表,对于插入和删除,LinkedList优于ArrayList,因为ArrayList要移动数据

  2. ArrayList和Vector的区别

    Vector和ArrayList几乎是完全相同的,唯一的区别在于Vector是同步类(synchronized),属于强同步类。因此开销就比ArrayList要大,访问要慢。正常情况下,大多数的Java程序员使用 ArrayList而不是Vector,因为同步完全可以由程序员自己来控制。Vector每次扩容请求其大小的2倍空间,而ArrayList是1.5倍。Vector还有一个子类Stack

posted @ 2022-07-13 11:22  苏无及  阅读(61)  评论(0编辑  收藏  举报