• 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倍。

     

  • 相关阅读:
    汇编语言(6)使用JCC指令构造分支与循环
    Golang接收者方法语法糖
    8.1.2 创建数据表时指定主键
    【案例】从kaggle的房价预测模型案例中了解深度学习模型,即如何学习深度学习模型
    trafilatura 网页解析原理分析
    1532_AURIX_TriCore内核架构_中断
    海外媒体宣发:海外媒体发稿6种方式方法分享
    卷积神经网络 图像处理,卷积神经网络基本原理
    【智能优化算法-水循环算法】基于蒸发的水循环算法求解用带约束的优化问题附matlab代码
    源代码审计(白盒测试)
  • 原文地址:https://blog.csdn.net/weixin_62427168/article/details/125467619