zoukankan      html  css  js  c++  java
  • 数组和集合(二):List集合的使用总结

    一、概述

    • · 继承collection接口,List代表一个元素有序、且可重复(包括null)的集合,集合中的每个元素都有其对应的顺序索引
    • · List默认按元素的添加顺序设置元素的索引
    • · 提供了一些通过索引来操作集合中指定位置元素的方法

    二、List实现类

    1. ArrayList

    • · 基于动态数组实现,初始容量10,添加一个元素时,如果超出当前数组的容量,就扩容1.5倍,
    • · 插入、删除元素时,需移动元素,效率较低;查找元素效率高
    • · 非线程安全

    2. LinkedList

    • · 是个双向链表,可以被当作栈、队列或双端队列来使用
    • · 插入、删除元素时,效率较高;查找元素要遍历链表,效率较低
    • · 非线程安全

    3. Vector:线程安全的动态数组,效率低(已过时,不建议使用)

    4. Stack:继承Vector,基于动态数组实现的一个线程安全的栈(后进先出)

     

    三、遍历List的四种方法

    初始化数据:

    List<String> list = new ArrayList<String>();
    
    list.add("aaa");
    
    list.add("bbb");
    
    list.add("ccc");

    方法一:foreach循环遍历

    for(String attribute : list) {
    
        System.out.println(attribute);
    
    }

    方法二:for循环遍历

    for(int i = 0 ; i < list.size() ; i++) {
    
        System.out.println(list.get(i));
    
    }

    方法三:Iterator(集合类的通用遍历方式)

    Iterator it = list.iterator();
    
    while(it.hasNext()) {
    
        System.ou.println(it.next);
    
    }

    方法四:ListIterator(使用同Iterator)

    • · ListIterator接口继承了Iterator接口,提供了专门操作List的方法
    ListIterator<String> listIterator = list.listIterator();
    
    while (listIterator.hasNext()){
    
        System.out.println(listIterator.next());
    
    }

    四、ListIterator与Iterator的区别

    1. 使用范围不同,Iterator可以应用于所有的集合,Set、List和Map和这些集合的子类型。而ListIterator只能用于List及其子类型。
    2. ListIterator有add方法,可以向List中添加对象,而Iterator不能。
    3. ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator不可以。
    4. ListIterator可以定位当前索引的位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。
    5. 都可实现删除操作,但是ListIterator可以实现对象的修改,set()方法可以实现。Iterator仅能遍历,不能修改。

     五、使用List的总结

    1. Arrays.asList(...)方法返回一个只读的List对象,不可修改、删除,是Arrays类中的一个内部类
    2. List集合按属性排序:使用Collections.sort()方法,自定义一个比较器
  • 相关阅读:
    微信小程序之 3d轮播(swiper来实现)
    微信小程序之canvas 文字断行和省略号显示
    iframe 自适应高度、父子页面传值、回调
    微信小程序之动态获取元素宽高
    微信小程序之自定义select下拉选项框组件
    使用text-align:justify,让内容两端对齐,兼容IE及主流浏览器的方法
    bind,apply,call,caller,callee还傻傻分不清楚?
    JVM从零学习(三)虚拟机栈
    JVM从零学习(二)PC Register程序计数器
    JVM从零学习(一)运行时数据区及线程
  • 原文地址:https://www.cnblogs.com/wslook/p/9385610.html
Copyright © 2011-2022 走看看