zoukankan      html  css  js  c++  java
  • 集合01_List

    List集合总览

    1. 元素有序,可重复,可通过索引访问
    2. 增加了通过索引操作集合的方法,如:
      • Object get(int index)
      • Object remove(int index)
      • void sort(Comparator c)
        books.sort((o1, o2) -> ((String)o1).length() - ((String)o2).length());
      • void replaceAll(UnaryOperator operator),根据operator指定的计算规则重新设置元素值
        books.replaceAll(ele -> ((String)ele).length());
    3. 判断元素相等的标准是两个对象通过equals方法比较返回true
    4. List提供了listIterator方法返回ListIterator对象,比Iterator增加了add方法向集合中添加元素,还支持向前迭代

    ArrayList类

    1. 底层数据结构是数组(同Vector),其封装了一个动态的,允许再分配的Object[]数组,不指定容量数组默认长度为10
    2. ArrayList线程不安全,Vector线程安全
    3. 重写分配数组大小
      • void ensureCapacity(int minCapacity),增大长度不小于minCapacity
      • void trimToSize(),调整数组长度为当前元素个数,减少占用的存储空间
    4. 核心要点如下:
      • add方法执行步骤:
        • 检查数组容量是否足够(默认先判断+1是否满足),足够则直接添加
        • 不足够则尝试扩容到原来的1.5倍是否足够int hugeCapacity = length + (length >> 1);,足够则扩容(Vector扩容一倍)
        • 仍不足够则直接扩容到需要的容量if (hugeCapacity - n < 0) {hugeCapacity = n;}
        • 扩容后调用System.arraycopy(this.elementData, n, this.elementData, n + 1, this.size - n);复制,其是使用c ++编写的native静态方法,在数据量较大时有优势
      • remove方法执行步骤:
        • 检查角标
        • 调用arraycopy进行复制,使元素向左移动覆盖被删除元素
        • 将数组末尾置为null,等待GC回收
        • 由此可见,删除元素不改变空间容量,减少容量需手动调用trimToSize()方法;可存放null值。

    LinkedList类

    1. 底层数据结构是双向链表,方便向前遍历
    2. 线程不安全
    3. 其实现了Deque接口,可以作为双端队列使用

    固定长度的List

    1. Arrays工具类的asList(Object ...a)方法可以把一个数组或者制定个数的对象转换成一个List集合,它是Arrays的内部类ArrayList的实例。
    2. Arrays.ArrayList是一个固定长度的List集合,程序只能访问它,不能修改它

    对线性表的性能分析

    1. 数组以一块连续的内存保存元素,以数组作为底层实现的集合随机访问性能最好
    2. 以链表作为底层实现的集合在执行插入删除操作时有较好的性能,因为可能需要经常重新分配内部数组的大小,如LinkedList集合
    3. 因此,查询多用ArrayList,增删多用LinkedList。对于极端情况,ArrayList性能要比LinkedList好
    4. 遍历集合,如果是ArrayList应使用随机访问(get),对于LinkedList应使用迭代器(Iterator)
  • 相关阅读:
    boost::asio在VS2008下的编译错误
    Java集合框架——接口
    ACM POJ 3981 字符串替换(简单题)
    ACM HDU 1042 N!(高精度计算阶乘)
    OneTwoThree (Uva)
    ACM POJ 3979 分数加减法(水题)
    ACM HDU 4004 The Frog's Games(2011ACM大连赛区第四题)
    Hexadecimal View (2011ACM亚洲大连赛区现场赛D题)
    ACM HDU 4002 Find the maximum(2011年大连赛区网络赛第二题)
    ACM HDU 4001 To Miss Our Children Time (2011ACM大连赛区网络赛)
  • 原文地址:https://www.cnblogs.com/pycrab/p/8933493.html
Copyright © 2011-2022 走看看