一、概述
List集合是Collection集合子类型,继承了Collection中所有的功能,比Collection约束更加详细、严谨。
二、特点
- 元素具备索引【有索引】
- 元素可以重复存储(两个对象如果equals方法调用后返回true)【可重复】
- 元素的存取是有序的【有序】
三、常用子类
- ArrayList:底层结构就是数组【查询快、增删慢】
- Vector:底层结构也是数组(线程安全、同步安全、低效、用的少)
- LinkedList:底层是链表结构(双向链表)【查询慢、增删快】
四、常用方法
List继承了Collection中所有方法,元素具备索引特性,因此新增了一些含有索引的特有方法。
4.1、add
public void add(int index, E element)
将指定的元素,添加到该集合中的指定位置上。如果指定位置上已存在元素,则会把已存在元素向后移动一位。
例子
List<String> list = new LinkedList<>(); list.add("hello"); list.add("world"); System.out.println(list); // [hello, world] list.add(1, "hi"); // [hello, hi, world]
4.2、get
public E get(int index)
返回集合中指定位置的元素
例子
List<String> list = new LinkedList<>(); list.add("hello"); list.add("world"); System.out.println(list.get(0)); // hello
4.3、remove
public E remove(int index)
移除列表中指定位置的元素,返回的是被移除的元素
例子
List<String> list = new LinkedList<>(); list.add("hello"); list.add("world"); System.out.println(list); // [hello, world] list.remove(0); System.out.println(list); // [world]
4.4、set
public E set(int index, E element)
用指定元素替换集合中指定位置的元素,返回值是更新前的元素。
例子
List<String> list = new LinkedList<>(); list.add("hello"); list.add("world"); String str = list.set(0, "hi"); System.out.println(str); // hello System.out.println(list); // [hi, world]
4.5、size
返回集合的大小
例子
List<String> list = new LinkedList<>(); list.add("hello"); list.add("world"); System.out.println(list.size()); // 2
4.6、isEmpty
检查集合是否为空,空返回true、非空返回false
例子
List<String> list = new LinkedList<>(); System.out.println(list.isEmpty()); // true list.add("hello"); list.add("world"); System.out.println(list.isEmpty()); // false
4.7、contains
检查集合是否包含指定元素,包含返回true、不包含返回false
例子
List<String> list = new LinkedList<>(); list.add("hello"); list.add("world"); System.out.println(list.contains("hello")); // true System.out.println(list.contains("hi")); // false
五、LinkedList
5.1、介绍
LinkedList底层结构是双向链表。每个节点有三个部分的数据,一个是保存元素数据,一个是保存前一个节点的地址,一个是保存后一个节点的地址。可以双向查询,效率会比单向链表高。如下是LinkedList的一些特有方法。
5.2、addFirst、addLast
// 将指定元素插入到此列表的开头 public void addFirst(E e) // 将指定元素添加到此列表的结尾 public void addLast(E e)
例子
LinkedList<String> list = new LinkedList<>(); list.add("hello"); list.add("world"); System.out.println(list); // [hello, world] list.addFirst("hi"); list.addLast("nice"); System.out.println(list); // [hi, hello, world, nice]
5.3、getFirst、getLast
// 返回此列表的第一个元素 public E getFirst() // 返回此列表的最后一个元素 public E getLast()
例子
LinkedList<String> list = new LinkedList<>(); list.add("hello"); list.add("world"); list.add("hi"); list.add("nice"); System.out.println(list); // [hello, world, hi, nice] System.out.println(list.getFirst()); // hello System.out.println(list.getLast()); // nice
5.4、removeFirst、removeLast
// 移除并返回此列表的第一个元素 public E removeFirst() // 移除并返回此列表的最后一个元素 public E removeLast()
例子
LinkedList<String> list = new LinkedList<>(); list.add("hello"); list.add("world"); list.add("hi"); list.add("nice"); System.out.println(list); // [hello, world, hi, nice] String firstE = list.removeFirst(); String lastE = list.removeLast(); System.out.println(list); // [hello, world, hi, nice] System.out.println(firstE); // hello System.out.println(lastE); // nice
5.5、pop
从此列表所表示的堆栈弹出一个元素(底层实现就是removeFirst)
public E pop()
例子
LinkedList<String> list = new LinkedList<>(); list.add("hello"); list.add("world"); list.add("hi"); System.out.println(list); // [hello, world, hi] String str = list.pop(); System.out.println(str); // hello System.out.println(list); // [world, hi]
5.5、push
将元素推入此列表所表示的堆栈(底层就是addFirst)
public void push(E e)
例子
LinkedList<String> list = new LinkedList<>(); list.add("hello"); list.add("world"); System.out.println(list); // [hello, world] list.push("hi"); System.out.println(list); // [hi, hello, world]