• Java回顾-Collection-List-ArratList/LinkedList/Vector的对比


    一、ArrayList、LinkedList、Vector 三者的异同

            -相同点:

                    三者都实现了List接口,存储的特点相同:存储有序可重复

            -不同点:

                    ArrayList:List接口的主要实现类,线程不安全,效率高,底层用Object[ ]数组存储

                    LinkedList:对于频繁的插入删除操作,用此类效率较高,底层用双向链表存储

                    Vector:List接口的古老实现类,线程安全,效率低,底层用Object[ ]数组存储

    二、常用方法

    1、常用方法(索引index相关)

            1、void add(int index, Object ele):在index位置插入ele元素

            2、boolean addAll(int index, Collection eles):从index位置开始将eles中的所有元素添加进来

            3、Object get(int index):获取指定index位置的元素

            4、int indexOf(Object obj):返回obj在集合中首次出现的位置

            5、int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置

            6、Object remove(int index):移除指定index位置的元素,并返回此元素

            7、Object set(int index, Object ele):设置指定index位置的元素为ele

            8、List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex位置的子集合

    2、LinkedList中单独的方法

            1、void addFirst(Object obj)

            2、void addLast(Object obj)

            3、Object getFirst()

            4、Object getLast()

            5、Object removeFirst()

            6、Object removeLast()

    三、ArrayList源码简析

             底层Object[] elementData初始化为{},空数组。.
             第一次调用add()时,底层才创建了长度10的数组。如果此次的添加导致底层elementData数组容量不够,则扩容。默认情况下,扩容为原来的容量的1.5倍,同时需要将原有数组中的数据复制到新的数组中。

            以上是jdk8中的情况。jdk7中的ArrayList的对象的创建类似于单例的饿汉式,而jdk8中的ArrayList的对象的创建类似于单例的懒汉式延迟了数组的创建,节省了内存。

    四、 LinkedList的源码简析


            内部声明了Node类型的first和last属性,默认值为null。
            调用add()方法时将数据封装到Node中,创建了Node对象。其中,Node定义为:

    1.  private static class Node<E> {
    2.              E item;
    3.              Node<E> next;
    4.              Node<E> prev;
    5.              Node(Node<E> prev, E element, Node<E> next) {
    6.              this.item = element;
    7.              this.next = next;
    8.              this.prev = prev;
    9.              }
    10.          }

           
     五、Vector的源码简析

            通过Vector()构造器创建对象时,底层都创建了长度为10的数组。 在扩容方面,默认扩容为原来的数组长度的2倍。

     

  • 相关阅读:
    export ‘OrbitControls‘ was not found in ‘three‘
    为什么我的MySQL会抖一下?
    GIT的安装与常见命令
    three.js 3D Banner实战
    CRC循环冗余校验计算方法
    Elasticsearch:使用 docker compose 来实现热温冷架构的 Elasticsearch 集群
    python+request+excel做接口自动化测试
    测试人生 | 97年双非学历的小哥哥,2线城市涨薪100%,我酸了......
    用 SwiftLint 保持 Swift 风格一致
    SQL调优方案
  • 原文地址:https://blog.csdn.net/weixin_62427168/article/details/125467619