List

List集合代表元素有序,可重复的集合,每个元素都有对应的顺序索引。通过索引来访问指定位置的集合元素,默认按元素的添加顺序设置元素的索引。

List接口是Collection接口的子接口,可以使用Collection接口里的全部方法,且List是有序集合,所以添加了一些根据索引操作集合元素的方法:

  void add(int index,Object element):将元素element插入index位置

  boolean addAll(int index,Collection c):将集合c所包含的所有元素插入index位置

  Object  get(int index):返回index位置的元素

  int indexOf(Object o):返回元素o在集合中第一次出现的索引

  int lastIndexOf(Object o)

  Object remove(int index):删除并返回index处的元素

  Object set(int index,Object o):将index处元素替换为o,返回被替换的元素

  List subList(int from,int to):返回从索引from(包含)到to(不包含)处所有集合元素组成的子集合

java8新增的默认方法:  

  void replaceAll(UnaryOperator opreator):根据operator计算规则重新设置集合所有元素,可以替换为Lumbda

  void sort(Comparator c):根据Comparator参数对集合进行排序,可以替换为Lumbda

可以使用for循环来遍历List

List判断对象相等通过调用参数的equals,所以两个String对象也可义相等

set方法的索引必须是有效索引,例如集合长度是4,则不能替换指定索引为4的元素,也就是set方法不会改变List集合长度

与Set只提供一个iterator()方法不同,List还提供了一个listIterator()方法,该方法返回一个listItreator对象,ListIterator接口继承了Iterator接口,提供专门操作List的方法:

  boolean hasPrevious():返回该迭代器关联的集合是否还有上一个元素

  Object previous():返回该迭代器上一个元素

  void add(Object o):在指定位置插入o

listIterator增加向前迭代功能和添加元素功能,iterator只能向后迭代和删除元素。

listIterator开始也需要正向迭代,然后才反向迭代:

  ListIterator lis = bookList.listIterator();

  while(lis.hasNext()){...}

  while(lis.hasPrevious()){...}

经典实现类:ArrayList和Vector,LinkedList

ArrayList和Vector类都是基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的、允许再分配的Object[]数组,使用 initialCapacity参数来设置该数组的长度,当向ArrayList或Vector中添加元素超出该数组长度时,initialCapacity自动增加,通常无需关心initialCapacity。只有在向数组添加大量元素时,使用ensureCapacity(int minCapacity)方法一次性的增加initialCapacity来减少重分配次数,从而提高性能。

空的ArrayList和Vector不指定initialCapacity,则Object[]数组的默认长度为10

两个方法重新分配Object[]数组:

  void ensureCapacity(int minCapacity):增加Object[]长度增加大于或等于minCapacity的值

  void trimToSize():调整Object[]数组长度为当前元素个数。减少占用的存储空间

Vector很多缺点,太老,减少使用

区别:ArrayList是线程不安全的,Vector是线程安全的,但性能比ArryayList低。可以通过Collections工具类将一个ArrayList变成线程安全

Vector提供一个Stack子类,同样是线程安全性能较差的,且取出元素后必须进行类型转换,不推荐使用(可以使用ArrayDeque):

  Object peek():返回栈的第一个元素,但并不出栈

  Object pop():取

  void push(Object item):存

固定长度的List:

  操作数组的工具类Arrays提供了asList(Object... a)方法,可以把一个数组或者指定个数的对象转换成一个List集合,这个集合既不是ArrayList实现类的实例,也不是Vector实现类的实例,而是Arrays的内部类ArrayList的实例 

  Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合里的元素,不可增加、删除该集合里的元素,否则报UnsupportedOperationException异常

LinkedList:基于链表,增删快

  特有方法:addFirst(E e) addLast(E e) getFirst() getLast() removeFirst() remveFirstOccurrence(E e)从此列表中移除第一次出现的指定元素 removeLast() 

posted on 2017-06-15 17:08  zawjdbb  阅读(317)  评论(0编辑  收藏  举报

导航