Java集合(4)--List接口及其实现类ArrayList、LinkedList和Vector

简介: Java集合(4)--List接口及其实现类ArrayList、LinkedList和Vector

文章目录


List接口概述

List接口常用方法

ArrayList实现类

LinkedList实现类

Vector实现类


List接口概述


List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引


List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据

序号存取容器中的元素


List接口的实现类有:ArrayList、LinkedList和Vector


eed16a0d738a416594dd0abe94cb6c92.png


List接口常用方法


List除了从Collection集合继承的方法外,List 集合里添加了一些根据索引来操作集合元素的方法。


void add(int index, Object ele):在index位置插入ele元素


boolean addAll(int index, Collection eles):从index位置开始将eles中的元素添加进来


Object get(int index):获取指定index位置的元素


int indexOf(Object obj):返回obj在集合中首次出现的位置


int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置


Object remove(int index):移除指定index位置的元素,并返回此元素


Object set(int index, Object ele):设置指定index位置的元素为ele


List subList(int fromIndex, int toIndex):返回[fromIndex,toIndex)处的子集合


ArrayList实现类


线程不安全,效率较高。底层使用数组进行存储。进行查找、末尾添加等操作相对较多的数据通常采用ArrayList实现类。


JDK1.7(类似于单例中饿汉式)


ArrayList list = new ArrayList(); //无参构造器,底层创建了长度为10的Object[]数组elementData
list.add(123); //elementData[0] = new Integer(123);
...
list.add(11); //如果此次的添加导致底层elementData数组容量不够,则会扩容,默认情况下扩容为原来的1.5倍,同时将原有的数组中的数据复制过去
//有参构造器
ArrayList listTwo = new ArrayList(int capacity);


JDK1.8(类似于单例中懒汉式)


ArrayList list = new ArrayList(); //无参构造器,底层Object[] elementData初始化为{},即还没有创建长度为10的数组
list.add(123); //第一次调用add()时,底层才创建长度为10的数组
//其余与JDK1.7一样


注意:Arrays.asList(…)方法返回的 List 集合,既不是 ArrayList 实例,也不是

Vector 实例。Arrays.asList(…)返回值是一个固定长度的 List 集合。


LinkedList实现类


线程不安全,效率较高。对于频繁进行插入、删除的操作,建议使用LinkedList类,效率较高。


LinkedList list = new LinkedList(); //内部声明了Node类型的first和last属性,用于记录首末元素,默认值为null
list.add(123); //创建Node对象,将123封装到Node对象中,该对象中还有prev和next两个变量,分别用来记录前一个和下一个元素的位置


Node类型的定义


private static class Node<E> {
  E item;
  Node<E> next;
  Node<E> prev;
  Node(Node<E> prev, E element, Node<E> next) {
  this.item = element;
  this.next = next;
  this.prev = prev;
  }
}


Vector实现类


Vector是线程安全的。大多数操作与ArrayList相同。通过Vector()构造器创建对象时,底层都创建长度为10的数组。在扩容方面,默认扩容为原来的数组长度的2倍。


在各种List中,最好把ArrayList作为缺省选择。当插入、删除频繁时,使用LinkedList;Vector总是比ArrayList慢,所以尽量避免使用。



相关文章
|
1天前
|
存储 安全 Java
Java一分钟之-集合框架进阶:Set接口与HashSet
【5月更文挑战第10天】本文介绍了Java集合框架中的`Set`接口和`HashSet`类。`Set`接口继承自`Collection`,特征是不允许重复元素,顺序不确定。`HashSet`是`Set`的实现,基于哈希表,提供快速添加、删除和查找操作,但无序且非线程安全。文章讨论了`HashSet`的特性、常见问题(如元素比较规则、非唯一性和线程安全性)以及如何避免这些问题,并提供了代码示例展示基本操作和自定义对象的使用。理解这些概念和注意事项能提升代码效率和可维护性。
9 0
|
1天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
7 0
|
3天前
|
存储 安全 算法
掌握Java并发编程:Lock、Condition与并发集合
掌握Java并发编程:Lock、Condition与并发集合
11 0
|
2月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
6月前
|
Java
Java集合框架“List“
Java集合框架“List“
49 1
|
7月前
|
安全 Java
【面试】Java集合中List,Set以及Map等集合体系详解
【面试】Java集合中List,Set以及Map等集合体系详解
32 0
|
4月前
|
Java 程序员
Java集合框架:List、Set、Map类型及泛型详解
Java集合框架:List、Set、Map类型及泛型详解
|
1月前
|
存储 Java API
java集合Collection(List)和泛型
java集合Collection(List)和泛型
|
1月前
|
存储 安全 Java
Java集合详解(List、Map、Set)
Java集合详解(List、Map、Set)
34 4
|
2月前
|
存储 安全 Java
【Java】集合(一)单列集合List
【Java】集合(一)单列集合List
22 0