List的方法
List中允许添加null,用get方法取值,是不是值是不是null并不影响
构造:
除了使用ArrayList和LinkedList,还可以通过List接口提供的of()方法,根据给定元素快速创建List:
List<Integer> list = List.of(1, 2, 5);
添加:
list.add(1, "nxj");
// 在列表的指定位置插入指定元素
删除:
public E remove(int index)
// 移除列表中指定位置的元素
protected void removeRange(int fromIndex, int toIndex)
//删除区段内元素
查询:
list.get(0);
// 返回列表中指定位置的元素
list.indexOf("lwc");
// 返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回 -1
list.lastIndexOf("lwc");
// 返回列表中最后出现指定元素的索引,如果列表不包含此元素,则返回 -1
list.subList(1, 2);
// 返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图
修改:
list.set(0, "lp");
// 用指定元素替换列表中指定位置的元素
在List中最常用的两个类就数ArrayList和LinkedList。他们两个的实现代表着数据结构中的两种典型:线性表和链表。在这里,这个线性表是可以根据需要自动增长的。Java的库里面默认没有实现单链表,LinkedList实际上是一个双链表。
ArrayList实现类
ArrayList是内部基于数组的线性表实现;方法如上
LinkedList实现类
LinkedList 同时实现了List< E >和Deque< E >两个接口,而Deque接口扩展自Queue,所以也满足先进先出的队列特性。此外,LinkedList还提供了栈的特性。
我们在使用的时候,总是用特定的接口来引用它,这是因为持有接口说明代码的抽象层次更高,而且接口本身定义的方法代表了特定的用途。
// 这是一个List:
List<String> list = new LinkedList<>();
// 这是一个Queue:
Queue<String> queue = new LinkedList<>();
//这是一个Stack
Deque<String> stack = new LinkedList<>();
//List、Queue、Deque是接口,LinkedList是具体实现类;LinkedList实现了多个接口!!!
// 不推荐的写法:
LinkedList<String> d1 = new LinkedList<>();
因为面向抽象编程的一个原则就是:尽量持有接口,而不是具体的实现类。
添加:
addFirst(E e)
addLast(E e)
删除:
removeFirst()
removeLast()
用LinkedList\Deque实现栈
Deque<String> stack = new LinkedList<>();
stack.push(E) //把元素压栈
E=stack.pop() //把栈顶的元素“弹出”
E=stack.peek() //取栈顶元素但不弹出