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慢,所以尽量避免使用。



相关文章
|
5月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
4月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
177 11
|
3月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
247 0
|
5月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
337 23
|
5月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。
|
存储 Java
Java中 List集合接口及其主要的实现类ArrayList,Vector,LinkedList的详解
Java中 List集合接口及其主要的实现类ArrayList,Vector,LinkedList的详解
263 0
|
Java 索引
Java总结 - List实现类Vector&Stack
由于之前 对ArrayList和LinkedList的分析,所以在看Vector和Stack的源码实现就会非常简单 观察上图,我们可以看到本文要说的Stack和Vector是父子关系,我们依旧从源码入手,期望能够对你有帮助,如果本文有理解不对的地方,请及时指正,谢谢您 Vector 我们知道...
1881 0
|
存储 安全 Java
java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析
java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异。 首先看一下List接口的的继承关系: list接口继承Collection接口,Collection接口继承Iterable接口。
2029 0
|
编解码 NoSQL 测试技术
性能工具之Jmeter HLS 插件(入门篇)
【2月更文挑战第28天】JMeter Redis 数据集 vs CSV 数据集性能对比
454 1
性能工具之Jmeter HLS 插件(入门篇)
|
存储 Java
【面试题精讲】为什么重写equals时必须重写hashCode方法?
【面试题精讲】为什么重写equals时必须重写hashCode方法?