zoukankan      html  css  js  c++  java
  • List集合

    List集合有序、元素可重复。以元素的添加顺序作为集合的排列顺序,用下标索引集合中的元素。

    List因为使用下标索引元素,所以元素可重复。Set使用元素本身来索引,所以元素不能重复。

    List的继承关系:

     

    List继承了Collection的所有方法,也有自身的一些方法(下标操作):

    void add(int index,Object element)   在指定处插入一个元素

    boolean  addAll(int index,Collection c)   在指定处插入c的所有元素

    Object get(int index)   获取指定位置处的元素

    int indexOf(Object obj)   返回该对象在集合中第一次出现的位置

    int lastIndexOf(Object obj)   最后一次出现的位置

    Object  remove(int index)   删除并返回指定位置的元素

    Object  set(int index,Object obj)   替换/设置指定位置的元素,并返回旧的元素

    List  subList(int start,int end)   返回子List

     ListIterator listIterator()   返回List集合专用的迭代器

    Java8新增了sort()、replaceAll()2个方法,可以自定义排序规则、匹配模板。

    List接口常用的实现类:

    1、ArrayList、Vector。

    ArrayList、Vector都是基于数组实现的List接口,内部都封装了一个动态的、长度可变的数组。

    向ArrayList、Vector集合中添加元素,如果数组长度不够,会自动调用  ensureCapacity()   重新设置数组长度,一般不用我们操心。

    如果要向ArrayList、Vector添加大量元素,可以手动调用  ensureCapacity()   一次性增大数组长度,这样可以减少重新分配的次数,提高性能。

    ensureCapacity(int minCapacity)      //参数是数组的最小元素个数

    Vector有一个子类Stack,用于模拟栈这种数据结构。

    ArrayList不是线程安全的,当多个线程同时访问、修改ArrayList集合时,需要手动同步该集合。

    Vector是线程安全的,但这意味着Vector有更大的开销,所以性能低于ArrayList。

    尽管Vector是线程安全的,但Vector的缺点太多了,尽量不要使用Vector。

    2、LinkedList

    LinkedList不仅实现了List接口,还实现了Queue接口的子接口Deque。Queue接口用于模拟队列这种数据结构。

    LinkedList是基于链表实现List接口的,内部维护了一个链表,来实现有序。

    性能分析:

    Queue集合、List集合是Java中的线性表结构。Queue很少使用。

    ArrayList、Vector是基于数组的,LinkedList是基于链表的。

    Vector既要维护一个数组,又要保证线程安全,开销较大,性能最差,一般不用。

    ArrayList基于数组,查找元素较快,适合多查找的操作,但插入、删除需要移动大量数组元素。

    LinkedList基于链表,适合经常插入、删除的操作,但查找效率不高。

    虽然LinkedList、ArrayList都有 Object  get(int index),void  set(int index, Object obj)方法 ,

    但LinkedList基于链表,它操作元素的方法基本上都要遍历链表,直到指定的元素才停下。尽管要遍历链表,但删除、插入时不用移动其它元素,速度较快。它的get()、set()都不是随机存取,要遍历链表,直到指定的index才停下来,速度很慢,获取、设置元素值尽量不要用get()、set(),而使用迭代器,遍历集合,迭代器更专业,速度更快。

    ArrayList基于数组,它的get()、set()才是随机存取。尽管是随机存取,但插入、删除元素时要移动大量的元素,速度很慢。获取、设置元素的值不要用迭代器,尽量用get()、set(),随机存取更快。

  • 相关阅读:
    shell脚本获取当前时间
    shell脚本读取用户输入并与之交互
    shell脚本获取客户端IP
    shell脚本中重启tomcat进程
    性能测试经验
    cmdhere的两种方法
    tomcat启动多个应用时报内存溢出
    [kuangbin]带你飞之'连通图'专题
    (模板)解决带负权最短路径 Bellman-ford 与 SPFA(前者的队列优化)
    [kuangbin]带你飞之'最短路练习'专题
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/10891347.html
Copyright © 2011-2022 走看看