• 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() 

  • 相关阅读:
    VS 2008 和 .NET 3.5 Beta 2 发布了
    搭建.NET 3.0环境
    Expression Studio和Silverlight学习资源、安装问题汇总
    Discuz! NT官方社区
    VS2005中ajax安装指南[转]
    IT人 不要一辈子靠技术生存(转)
    Discuz!NT2.5发布 正式版同步开源
    VS2005下开发Silverlight 1.1翻译加补充
    自动化测试案例
    [原]JavaScript必备知识系列开篇
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/7018871.html
Copyright © 2020-2023  润新知