List接口中存储的是一组不唯一的,有序的对象
List接口的父接口是Collection接口,所以List接口中大多数方法都是从Collection接口中继承的
List接口有两个实现类:
1.ArrayList实现类:采用数组的数据结构
优点:遍历和随机访问元素的效率比较高
缺点:添加和删除需要移动大量的数据效率低
2.LinkedList实现类:采用链表的数据结构
优点:插入和删除元素的效率比较高
缺点:遍历和随机访问元素的效率比较低
ArrayList实现类特点及api:
特点:
1.可以存放不同类型的数据,而数组只能存放固定类型的数据
2.在使用ArrayList子类实现的时候,初始化的长度是10,当长度不够的时候会自动进行扩容(newlength = oldlength * 1.5)
get(int index):
获取集合中指定下标位置的元素
1 public class ListDemo { 2 public static void main(String[] args) { 3 List list = new ArrayList(); 4 list.add("a"); 5 list.add(0); 6 list.add(true); 7 System.out.println(list.get(0)); 8 } 9 } 10 打印结果:a
indexOf(Object o):
按照集合元素下标递增顺序,获取集合中指定元素的下标位置
1 public class ListDemo { 2 public static void main(String[] args) { 3 List list = new ArrayList(); 4 list.add("a"); 5 list.add(0); 6 list.add(true); 7 System.out.println(list.indexOf("a")); 8 } 9 } 10 打印结果:0
lastIndexOf(Object o):
按照集合元素下标递减顺序,获取集合中指定元素的下标位置
1 public class ListDemo { 2 public static void main(String[] args) { 3 List list = new ArrayList(); 4 list.add("a"); 5 list.add(0); 6 list.add("a"); 7 list.add(true); 8 System.out.println(list.lastIndexOf("a")); 9 } 10 } 11 打印结果:2
set(int index,Object element):
在集合中的指定位置插入元素
1 public class ListDemo { 2 public static void main(String[] args) { 3 List list = new ArrayList(); 4 list.add("a"); 5 list.add(0); 6 list.add("a"); 7 list.add(true); 8 list.set(0,"yyy"); 9 System.out.println(list); 10 } 11 } 12 打印结果:[yyy, 0, a, true]
subList(int fromIndex,int toIndex):
截取集合中指定位置之间的元素,放入新的集合中
1 public class ListDemo { 2 public static void main(String[] args) { 3 List list = new ArrayList(); 4 list.add("a"); 5 list.add(0); 6 list.add("a"); 7 list.add(true); 8 List list1 = list.subList(0, 2); 9 System.out.println(list1); 10 } 11 } 12 打印结果:[a, 0]
LinkedList实现类api:
add(int index,Object element):
在指定位置添加元素
链表中添加元素,会断开指定元素的链条,上一元素末尾指针指向新元素开头,新元素末尾指针指向下一元素开头
addFirst(Object e):
在链表第一个元素之前插入元素
addLast(Object e):
在链表最后一个元素之后插入元素
element():
获取链表中第一个元素
offer(Object e):
在链表最后一个元素之后插入元素,该方法与add()方法相同
peek()、peekFirst()、peekLast()、poll()、pollFirst()、pollLast()、get():
这些方法都是获取元素的方法
注意:
ArrayList与LinkedList拥有更加丰富的方法实现,需要用的时候查询api即可,不需要记忆