zoukankan      html  css  js  c++  java
  • Java 集合:(四) List子接口

    一、List 接口概述

      1、鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组;

      2、List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引;

      3、List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。

      4、JDK APIList接口的实现类常用的有: ArrayListLinkedListVector

      5、List 接口结构

        

    二、常用实现类简单对比

      ArrayList、LinkedList、Vector三者的异同:

      相同:三个类都是实现了List接口,存储数据的特点相同:存储有序的、可重复的数据

      不同点

        (1)ArrayList:作为List接口的主要实现类;线程不安全的,效率高;底层使用Object[] elementData存储;

        (2)LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储;

        (3)Vector:作为List接口的古老实现类;线程安全的,效率低;底层使用Object[] elementData存储;

    三、List 接口方法

      List除了从Collection集合继承的方法外, List 集合里添加了一些根据索引来操作集合元素的方法。

      

       这些方法有的已经在 Collection 接口中进行了简要分析,而 List 接口继承自 Collection,因此这里只分析一些 List 特有的方法:

    //在index位置插入ele元素
    void add(int index, Object ele)
    
    // 将一个集合的所有元素添加到当前集合的指定位置;
    boolean addAll(int index, Collection<? extends E> c);
    
    // 用指定的运算结果替代集合中的所有元素
    default void replaceAll(UnaryOperator<E> operator);
    
    // 用指定的 Comporator 对集合元素进行排序
    default void sort(Comparator<? super E> c);
    
    // 获取指定位置的元素
    E get(int index);
    
    // 将某个位置的元素替换为指定元素
    E set(int index, E element);
    
    // 将指定元素添加到集合的指定位置
    void add(int index, E element);
    
    // 移除指定位置的元素,移除指定index位置的元素,并返回此元素
    E remove(int index);
    
    // 某个元素在集合中(第一次出现)的位置
    int indexOf(Object o);
    
    // 某个元素在集合中最后一次出现的位置
    int lastIndexOf(Object o);
    
    // 返回元素的列表迭代器
    // 相当于 list.listIterator(0)
    ListIterator<E> listIterator();
    
    // 返回元素的 listIterator(指定起始位置)
    ListIterator<E> listIterator(int index);
    
    // 获取集合的子集,返回从fromIndex到toIndex位置的子集合
    List<E> subList(int fromIndex, int toIndex);
    

      常用方法总结:

    增:add(Object obj)
    删:remove(int index) / remove(Object obj)
    改:set(int index, Object ele)
    查:get(int index)
    插:add(int index, Object ele)
    长度:size()
    

    四、List 的遍历方式

      1、Iterator迭代器方式

      2、增强for循环

      3、普通的循环

      4、案例

     1     @Test
     2     public void test3(){
     3         ArrayList list = new ArrayList();
     4         list.add(123);
     5         list.add(456);
     6         list.add("AA");
     7 
     8         //方式一:Iterator迭代器方式
     9         Iterator iterator = list.iterator();
    10         while(iterator.hasNext()){
    11             System.out.println(iterator.next());
    12         }
    13 
    14         System.out.println("***************");
    15 
    16         //方式二:增强for循环
    17         for(Object obj : list){
    18             System.out.println(obj);
    19         }
    20 
    21         System.out.println("***************");
    22 
    23         //方式三:普通for循环
    24         for(int i = 0;i < list.size();i++){
    25             System.out.println(list.get(i));
    26         }
    27 
    28     }

      面试题:区分List中remove(int index)和remove(Object obj)

     1     @Test
     2     public void testListRemove() {
     3         List list = new ArrayList();
     4         list.add(1);
     5         list.add(2);
     6         list.add(3);
     7         updateList(list);
     8         System.out.println(list);//
     9     }
    10 
    11     private void updateList(List list) {
    12 //        list.remove(2);
    13         list.remove(new Integer(2));
    14     }
  • 相关阅读:
    dotweb框架之旅 [三]
    dotweb框架之旅 [二]
    dotweb框架之旅 [一]
    对 dotweb 框架进行统一的自定义错误处理
    go服务端----使用dotweb框架搭建简易服务
    Nginx日志文件切割
    linux安装PHP-memcache-redis扩展
    图与最短路径
    素数(质数)的一个用法
    一个手机号码剔重的问题
  • 原文地址:https://www.cnblogs.com/niujifei/p/14671735.html
Copyright © 2011-2022 走看看