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



相关文章
|
11天前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
21 2
|
11天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
16天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
16天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
15天前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
12 0
|
6月前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
553 1
|
6月前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
152 0
|
开发工具 Android开发
Mac 安卓(Android) 配置adb路径
Mac 安卓(Android) 配置adb路径
844 0
|
3月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
90 0
|
6月前
|
Shell Android开发
ADB更改Android设备屏幕显示方向
ADB更改Android设备屏幕显示方向
351 5

热门文章

最新文章

下一篇
无影云桌面