文章目录
List
1、在Java中,List是一个接口
2、继承自Collection
3、从数据结构的角度看,List是一个线性表,即n个具有相同类型的元素的有限序列。
线性表:零个或多个数据元素的有限序列
线性表的存储方式有两种,顺序存储方式和链式存储方式。
顺序表
顺序表的定义和特点
用顺序存储方式实现的线性表称为顺序表,是基于数组作为表的存储结构。
顺序表的定义:把线性表中所有表项按照其逻辑顺序依次存储到从计算机存储中指定存储位置开始的一块连续的存储空间中。
顺序表的特点:
(1)在顺序表中,各个表项的逻辑顺序与其存放的物理顺序一致,即第i个表项存储于第i个物理位置(1<=i<=n)
(2)对顺序表中所有表项,既可以进行顺序访问,也可以进行随机访问。也就是说,既可以从表的第一个表项开始逐个访问表项,也可以按照表项的序号(下标)直接访问表项
ArrayList的使用
1、实现了List接口
2、底层使用了一个数组(连续空间)存储元素
3、从数据结构的角度看,是动态类型的顺序表
ArrayList的构造
import java.util.ArrayList;
import java.util.List;
public class TestList {
public static void main(String[] args) {
// 1、构造一个空的顺序表
List<Integer> list = new ArrayList<>();
// 2、构造一个容量为10的顺序表
List<Integer> list1 = new ArrayList<>(10);
list1.add(1); // 向list1中添加数据元素
list1.add(2);
list1.add(3);
// list1.add("good"); 编译错误,因为顺序表初始定义的类型List<Integer>,所以只能存放int型的数据
// 若要存放字符串,需如下定义
List<String> list2 = new ArrayList<>(10);
list2.add("good");
// 3、此时构造的list3与list2相同,包括表中存放的数据类型
List<Integer> list3 = new ArrayList<>(list1);
}
}
常见操作
import java.util.ArrayList;
import java.util.List;
public class TestList {
public static void main(String[] args) {
// 构造一个空的顺序表list
List<Integer> list = new ArrayList<>();
// 向顺序表中添加元素,默认是尾插
list.add(2);
list.add(4);
list.add(6);
list.add(8);
list.add(10);
System.out.println(list);
// 获取list中有效元素的个数
System.out.println(list.size());
// 在下标为3的位置上插入元素7
list.add(3,7);
System.out.println(list);
// 创建一个空的顺序表list1
List<Integer> list1 = new ArrayList<>();
list1.add(20);
list1.add(22);
// 将list1中的数据元素插入到list中,默认为尾插
list.addAll(list1);
System.out.println(list);
// 将list1中的元素插入到list下标为2的位置
list.addAll(2,list1);
System.out.println(list);
// 删除下标为2的元素
list.remove(2);
System.out.println(list);
// 获取下标为7的元素
System.out.println(list.get(7));
// 将下标为7的元素设置为21
list.set(7,21);
System.out.println(list);
// 判断元素5是否在list中
System.out.println(list.contains(5));
// 查找指定元素第一次出现的位置
System.out.println(list.indexOf(22)); // 从前往后找
System.out.println(list.lastIndexOf(22)); // 从后往前找
// 查找指定区间的元素,下标[1,3)
System.out.println(list.subList(1,3));
// 清空
System.out.println(list);
list.clear();
System.out.println(list);
}
}
[2, 4, 6, 8, 10]
5
[2, 4, 6, 7, 8, 10]
[2, 4, 6, 7, 8, 10, 20, 22]
[2, 4, 20, 22, 6, 7, 8,