List(线性表)
常用方法:
boolean add(E e)----->尾插e
void add(int index,E element)------>将e插入到index位置
E remove(int index)------->删除index位置的元素
boolean remove(Object o)------->删除遇到的第一个o
E get(int index)------->获取下标inedx位置元素
E set(int index,E element)-------->将下标index位置的元素设置为element
void clear()-------->清空
boolean contains(Object o)--------->判断 o 是否在线性表中
int indexOf(Object o)-------->返回第一个 o 所在下标
int lastIndexOf(Object o)--------->返回最后一个 o 的下标
List subList(int fromIndex, int toIndex)--------->截取部分 list
ArrayList(顺序表)
ArrayList()---------->无参构造
ArrayList(Collection<? extends E> c)----------->利用其他 Collection 构建 ArrayList
ArrayList(int initialCapacity)--------->指定顺序表初始容量
ArrayList是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入和删除数据慢。
LinkedList(链表)
LinkedList()---------->无参构造
LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项修改指针即可,所以插入和删除数据速度较快。
示例
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
public class ListDemo {
public static void main(String[] args) {
List<String> courses = new ArrayList<>();
courses.add("C 语言");
courses.add("Java SE");
courses.add("Java Web");
courses.add("Java EE");
// 和数组一样,允许添加重复元素
courses.add("C 语言");
// 按照添加顺序打印
System.out.println(courses);
// 类似数组下标的方式访问
System.out.println(courses.get(0));
System.out.println(courses);
courses.set(0, "计算机基础");
System.out.println(courses);
// 截取部分 [1, 3)
List<String> subCourses = courses.subList(1, 3);
System.out.println(subCourses);
// 重新构造
List<String> courses2 = new ArrayList<>(courses);
System.out.println(courses2);
List<String> courses3 = new LinkedList<>(courses);
System.out.println(courses3);
// 引用的转换
ArrayList<String> courses4 = (ArrayList<String>)courses2;
System.out.println(courses4);
// LinkedList<String> c = (LinkedList<String>)course2; 错误的类型
LinkedList<String> courses5 = (LinkedList<String>)courses3;
System.out.println(courses5);
// ArrayList<String> c = (ArrayList<String>)course3; 错误的类型
}
}
运行结果:
[C 语言, Java SE, Java Web, Java EE, C 语言]
C 语言
[C 语言, Java SE, Java Web, Java EE, C 语言]
[计算机基础, Java SE, Java Web, Java EE, C 语言]
[Java SE, Java Web]
[计算机基础, Java SE, Java Web, Java EE, C 语言]
[计算机基础, Java SE, Java Web, Java EE, C 语言]
[计算机基础, Java SE, Java Web, Java EE, C 语言]
[计算机基础, Java SE, Java Web, Java EE, C 语言]