Java学习笔记之List集合

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangshuaionline/article/details/85319715

List是一个有序集合接口,实现该接口,可以精确控制列表中每个元素的插入位置,可以通过整数索引访问元素,并搜索列表中的元素。List允许重复,如果不允许重复,建议使用Set集合。

包含方法:

  1. int size(); 返回集合中的元素的数量,集合数量上限为Integer.MAX_VALUE
  2. boolean isEmpty(); 如果列表中没有元素,返回true
  3. boolean contains(Object o); 如果集合中包含o元素,返回true。规定A:如果指定元素的类型与此集合不兼容,则抛出异常ClassCastException。规定B:如果此集合不允许null元素,并且指定的元素为null,则抛出异常NullPointerException
  4. Iterator iterator();返回一个迭代器,该迭代器管理此集合中的元素。
  5. Object[] toArray();返回包含此列表中所有元素的数组。规定A:返回的数组需要重新分配一个新的数组,使返回的数组足够安全,后续操作不受当前集合影响。
  6. T[] toArray(T[] a);功能如同Object[] toArray(),规定A:如果指定数组的类型和集合中的元素类型不匹配,则抛出ArrayStoreException。规定B:如果指定的数组为null,则抛出NullPointerException。
    List<String> linkedList = new LinkedList<>(arrayList);
    for(int i =0;i<100;i++) linkedList.add("qqq");
    String[] y = linkedList.toArray(null);
    Log.w("打印"," "+y.length);
    
    以上代码不会走Log,直接抛出NullPointerException。
  7. boolean add(E e);将指定的元素追加到集合末尾。规定A:如果对添加类型有限制,请在文档写明。规定B:如果集合不支持add操作,抛出UnsupportedOperationException。规定C:如果指定元素类型不匹配,抛出ClassCastException。规定D:如果指定元素为null,并且本集合不允许null,抛出NullPointerException。规定E:如果元素中某些元素不匹配,抛出IllegalArgumentException。
  8. boolean remove(Object o);删除匹配到的第一个(或者多个,由实现类决定)如果匹配到,返回true,否则返回false。如果没有匹配到,不会更改。规定A:如果指定类型不匹配,抛出ClassCastException。规定B:如果指定元素为null并且本集合不允许null元素,抛出NullPointerException。规定C:如果本集合不支持remove操作,抛出UnsupportedOperationException。
  9. boolean containsAll(Collection<?> c);如果本集合包含指定集合中所有元素,返回true,否则返回false。规定A:如果指定集合中有元素和本集合中元素类型不匹配,抛出ClassCastException。规定B:如果指定集合中有元素为null,并且本集合不允许null元素,抛出NullPointerException。
    List<String> arrayList = new ArrayList<>();
    for(int i =0;i<50;i++){
        arrayList.add("aaa"+i);
    }
    arrayList.add("aaa"+49);
    List<String> linkedList = new LinkedList<>(arrayList);
    for(int i =0;i<100;i++){
        linkedList.add("aaa"+i);
    }
    boolean isContains = linkedList.containsAll(arrayList);
    Log.w("打印"," "+isContains);
    
    输出依然为true,就说明默认情况下不管重复不重复,只用指定集合中每个元素和当前集合匹配。
  10. boolean addAll(Collection<? extends E> c);将指定集合中的所有元素追加到此集合的末尾(顺序可以自己定义),如果添加过程中修改了指定的集合,操作结果是不确定的。如果添加之后集合更改了,则返回true,否则返回false。规定A:如果此集合不支持addAll()方法,抛出UnsupportedOperationException。规定B:如果指定集合中的元素类型和本集合类型不同,抛出ClassCastException。规定C:如果本集合不允许null元素,指定集合中有null元素;或者指定元素为null,抛出NullPointerException。规定D:如果元素中某些元素不匹配,抛出IllegalArgumentException。
    List<String> linkedList = new LinkedList<>(arrayList);
    for(int i =0;i<100;i++){
       linkedList.add("aaa"+i);
    }
    boolean isContains = linkedList.addAll(new ArrayList<String>());
    Log.w("打印"," "+isContains);
    
    如果添加之后集合没有改变,返回false。
  11. boolean addAll(int index, Collection<? extends E> c);将指定集合中的所有元素插入到此集合中指定位置,指定位置如果本来有元素,则该位置元素和后续元素向右移动。如果操作后集合发生了改变,则返回true,否则返回false。规定A:如果此集合不支持addAll()方法,抛出UnsupportedOperationException。规定B:如果指定集合中的元素类型和本集合类型不同,抛出ClassCastException。规定C:如果本集合不允许null元素,指定集合中有null元素;或者指定元素为null,抛出NullPointerException。规定D:如果元素中某些元素不匹配,抛出IllegalArgumentException。规定E:如果index超出了范围,抛出异常IndexOutOfBoundsException。
  12. boolean removeAll(Collection<?> c);从此列表中删除指定集合中包含的所有元素。如果操作之后集合发生改变,返回true,否则返回false。规定A:如果此集合不支持removeAll()方法,抛出UnsupportedOperationException。规定B:如果指定元素类型和此集合元素类型有不相同的,抛出ClassCastException。规定C:如果指定集合中有元素为null,并且此集合不允许存在null元素;或者指定集合为null,抛出NullPointerException。
    List<String> arrayList = new ArrayList<>();
    arrayList.add("aaa"+99);
    List<String> linkedList = new LinkedList<>();
    for(int i =0;i<100;i++){
        linkedList.add("aaa"+i);
    }
    linkedList.add("aaa"+99);
    Log.w("打印"," "+linkedList.size());
    linkedList.removeAll(arrayList);
    Log.w("打印"," "+linkedList.size());
    
    打印结果为:
    W/打印:  101
    W/打印:  99
    
    由此可见,默认情况下删除是删除相同元素。
  13. boolean retainAll(Collection<?> c);删除指定集合中不包含的元素。如果执行后发生了改变,则返回true,否则返回false。规定A:如果此集合不支持使用retainAll方法,抛出UnsupportedOperationException。规定B:如果此集合中的元素和指定集合中的元素为不同类型,抛出ClassCastException。规定C:如果指定集合为null,此集合不允许存在null元素;或者指定集合为null,则抛出NullPointerException。规定D:如果元素中某些属性不匹配,当抛出IllegalArgumentException。规定E:如果index超出范围,则抛出IndexOutOfBoundsException。
    List<String> arrayList = new ArrayList<>();
    arrayList.add("aaa"+11);
    arrayList.add("aaa"+22);
    arrayList.add("aaa"+33);
    arrayList.add("aaa"+44);
    List<String> linkedList = new LinkedList<>();
    linkedList.add("aaa"+99);
    linkedList.add("aaa"+22);
    linkedList.add("aaa"+33);
    Log.w("打印"," "+linkedList.size());
    linkedList.retainAll(arrayList);
    Log.w("打印"," "+linkedList.size());
    
    这里我们指定集合用arrayList,里面包含4个元素,此集合用linkedList,里面包含三个元素,然后用linkedList调用retainAll方法,传入arrayList,看下打印结果。
    W/打印:  3
    W/打印:  2
    
    这里可以看出来指定集合中的元素不一定都要在此集合中存在。
  14. default void replaceAll(UnaryOperator operator){},Default Methods是java8中引进的函数,默认可以不被实现。UnaryOperator是继承Function的一个接口。此方法是把集合中每个元素都替换成operator运算之后的结果。规定A:如果此集合不可修改,或者无法替换元素,则抛出UnsupportedOperationException。规定B:如果perator是null,或者perator返回的结果为null,但是集合不允许null元素,抛出NullPointerException。
  15. default void sort(Comparator<? super E> c):根据指定的c引发的顺序对此集合排序。规定A:此集合中所有元素必须使用指定的比较器比较。首先将此集合转化为数组,然后根据规则对集合排序,最后将排序后的集合循环输出到集合中。规定B:如果c为null,则此集合中所有元素必须实现Comparable接口,并且元素的Comparable natureal ordering是可用的。规定C:此集合必须可修改,但无需调整大小。规定D:API>25的Android应用。规定E:如果列表中的元素没有使用指定比较器,抛出ClassCastException。规定F:如果集合的iterator不支持set操作,抛出UnsupportedOperationException。规定G:如果比较器违反了comparator合约,抛出IllegalArgumentException。
  16. void clear();移除所有元素,执行之后这个集合为empty。规定A:如果此集合不支持clear,抛出UnsupportedOperationException。
  17. boolean equals(Object o);比较指定对象与此集合的想等姓。当且仅当指定对象也是list,并且两个集合具有相同的大小以及集合中对应的元素都是equal。
  18. int hashCode();返回此集合的哈希码值。
  19. E get(int index);返回指定位置的元素。规定A:如果index超出范围,抛出IndexOutOfBoundsException。
  20. E set(int index, E element);将指定位置替换成指定元素,返回被替换的元素。规定A:如果集合不支持set方法,抛出UnsupportedOperationException。规定B:如果指定的元素类型不匹配,抛出ClassCastException。规定C:如果指定的元素为null,并且集合中不允许null元素,抛出NullPointerException。规定D:如果指定集合中的一些属性不匹配,抛出IllegalArgumentException。规定E:如果index超出范围,抛出IndexOutOfBoundsException。
  21. void add(int index, E element);将指定元素插入此集合的指定位置,并将原位置以及原位置之后位置的元素向右移动。规定A:如果此集合不支持add方法,抛出UnsupportedOperationException。规定B:如果指定元素类型不匹配,抛出ClassCastException。规定C:如果指定的元素为null,并且此集合不允许null元素,抛出NullPointerException。规定D:如果指定元素中有属性不匹配,则抛出IllegalArgumentException。规定E:如果index超出范围,抛出IndexOutOfBoundsException。
  22. E remove(int index);移除指定位置的元素,并将后边的元素向左移动,返回被移除的元素。规定A:如果此集合不支持remove方法,抛出UnsupportedOperationException。规定B:如果index超出范围,抛出IndexOutOfBoundsException。
  23. int indexOf(Object o);返回集合中首次出现该元素的索引值,如果没有匹配到,返回-1.规定A:如果指定元素与此集合类型不同,抛出ClassCastException。规定B:如果指定的元素为null,并且此集合不允许null元素,抛出NullPointerException。
  24. int lastIndexOf(Object o);返回指定元素最后一次出现的索引值,如果不包含此元素,则返回-1。规定A:如果指定元素类型和此集合类型不匹配,抛出ClassCastException。规定B:如果指定元素为null并且此集合不允许null元素,抛出NullPointerException。
  25. ListIterator listIterator();返回此集合的迭代器。
  26. ListIterator listIterator(int index);从列表的指定位置开始,返回列表中元素的迭代器,对于ListIterator来说,调用的是index-1。规定A:如果index超出范围,抛出IndexOutOfBoundsException。
  27. List subList(int fromIndex, int toIndex);返回fromIndex-toIndex之间数据的集合(左闭右开),返回的集合和原集合保持关联性。下面做一个测试:
    List<String> linkedList = new LinkedList<>();
    for(int i =0;i<100;i++){
        linkedList.add("aaa"+i);
    }
    Log.w("打印"," "+linkedList.size());
    List<String> list = linkedList.subList(2,50);
    list.clear();
    Log.w("打印"," "+linkedList.size());
    
    打印输出结果:
    W/打印:  100
    W/打印:  52
    
    由此可见,对截取出来的集合做的操作可以映射到原集合上,使用的时候慎重。
    规定A:如果fromIndex和toIndex超出范围,抛出IndexOutOfBoundsException。
  28. @Override
    default Spliterator spliterator() {
    return Spliterators.spliterator(this, Spliterator.ORDERED);
    }
    在此列表的元素上创建Spliterator。

猜你喜欢

转载自blog.csdn.net/yangshuaionline/article/details/85319715