`

List 接口有两个实现类,ArrayList 与LinkedList该如何选择

 
阅读更多
List 接口有两个实现类,ArrayList 与LinkedList
如果排序用ArrayList 如果经常删写改 操作用 LinkedList,为什么会有这样一说法呢,我们从两个类的源码来分析。
ArrayList:
 数据存储类型是:
private transient Object[] elementData;//就是一个普通的对象数据。
 public boolean add(E e) {//增加对象的方法,可以看出是把数组的大小改变为size+1,然后把老的对象数据复制到新的对象数据
    ensureCapacity(size + 1);  // Increments modCount!!
    elementData[size++] = e;//最后把新添加进来的值放到最后一个位置
    return true;
    }

 public void add(int index, E element) {   //从index开始把位置往后移一位,所以效率会比较低

 

    if (index > size || index < 0)

 

        throw new IndexOutOfBoundsException(

 

        "Index: "+index+", Size: "+size);

 

 

 

    ensureCapacity(size+1);  // Increments modCount!!

 

    System.arraycopy(elementData, index, elementData, index + 1,

 

             size - index);

 

    elementData[index] = element;

 

    size++;

 

    }

 

 

 

  public E remove(int index) {
    RangeCheck(index);
 
    modCount++;
    E oldValue = (E) elementData[index];
 
    int numMoved = size - index - 1;
    if (numMoved > 0)
        System.arraycopy(elementData, index+1, elementData, index,
                 numMoved);
    elementData[--size] = null// Let gc do its work
 
    return oldValue;
    }
 

LinkedList:

 数据存储类型是:<!--WizRtf2Html Charset=0 -->private transient Entry<E> header = new Entry<E>(nullnullnull);
以对象链表存储数据
  private static class Entry<E> {
    E element;//当前
    Entry<E> next;//下
    Entry<E> previous;//前
        Entry(E element, Entry<E> next, Entry<E> previous) {
        this.element = element;
        this.next = next;
        this.previous = previous;
    }
    }
 
 private Entry<E> addBefore(E e, Entry<E> entry) {//所有的ADD方法都是调用这个,
    Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);
    newEntry.previous.next = newEntry;
    newEntry.next.previous = newEntry;
    size++;
    modCount++;
    return newEntry;
    }
 private E remove(Entry<E> e) {  //删除的话只是把前一个和后一个的对象重新指向一个,然后把当然要删除的对象置为空
    if (e == header)
        throw new NoSuchElementException();
 
        E result = e.element;
    e.previous.next = e.next;
    e.next.previous = e.previous;
        e.next = e.previous = null;
        e.element = null;
    size--;
    modCount++;
        return result;
    }
 

 

所以总结出来,排序用ArrayList(对象数组)   经常删写改 操作用 LinkedList(链表)
分享到:
评论

相关推荐

    ArrayList LinkedList Vector区别

    ArrayList、LinkedList、Vector 是 Java 中常用的数据结构实现类,它们都实现了 List 接口,但它们在存储方式、性能、线程安全性等方面有着不同特点。 首先,ArrayList 和 Vector 都是采用数组方式存储数据的,这种...

    ArrayList和Linkedlist1

    在IT领域,特别是Java编程中,ArrayList和LinkedList是两种非常重要的数据结构,它们都是List接口的实现类。理解这两者的区别对于优化程序性能至关重要。面试官询问这些知识点,旨在评估应聘者的理论基础和实践能力...

    java基础--list(ArrayList、LinkedList、匿名类).docx

    ArrayList和LinkedList是List接口的两种主要实现,它们各有优缺点,适用于不同的场景。此外,匿名类的概念在Java中用于简化代码结构,尤其是在实现接口时。 1. **List接口** List接口继承自Set接口,它不仅提供了...

    ArrayList LinkedList Vector性能测试

    这三个类都实现了List接口,提供了多种操作方法,但它们在内部实现和性能特性上有所不同。这篇性能测试着重探讨了这三者在随机读取、插入和删除操作时的表现。 1. ArrayList: ArrayList是基于数组实现的列表,它...

    java 集合之实现类ArrayList和LinkedList的方法

    "java 集合之实现类ArrayList和LinkedList的方法" Java 集合框架中,ArrayList 和 LinkedList 是两种常用的实现类,分别实现了 List 接口。下面我们将详细介绍这两种实现类的方法。 ArrayList ArrayList 是一个...

    arraylist-linkedlist-test.zip

    ArrayList和LinkedList是Java集合框架中两种重要的动态数组实现,它们都是List接口的实现类,但它们在存储和操作数据方面有着显著的区别。本文件"arraylist-linkedlist-test.zip"主要探讨了在执行添加和删除元素操作...

    list集合案例增、删、改、查,ArrayList与LinkedList的区别,LinkedList堆栈/队列的开发

    总结来说,理解`List`接口及其常用实现类如`ArrayList`和`LinkedList`的特性是Java开发中必不可少的知识点。正确选择和使用这些数据结构能够显著提高程序的效率和可读性。同时,根据具体需求,利用`LinkedList`实现...

    当面试官问我ArrayList和LinkedList哪个更占空间时,我这么答让他眼前一亮

    在 Java 中,ArrayList 和 LinkedList 是两个常用的集合类,它们都是 List 接口的实现类,但它们之间有着鲜明的区别。今天,我们将深入探讨这两个集合类的实现原理和比较。 ArrayList 的实现原理 ArrayList 是基于...

    对比Vector、ArrayList、LinkedList1

    在Java集合框架中,Vector、ArrayList和LinkedList是三种常见的List接口实现类,它们各自具有不同的特点和适用场景。下面我们将详细对比这三个类的区别。 1. **Vector** - **线程安全**:Vector是线程安全的,因为...

    java 中ArrayList与LinkedList性能比较

    ArrayList和LinkedList是java中两个常用的实现List接口的类,它们之间的性能比较是一个非常重要的知识点。 首先,让我们来了解ArrayList和LinkedList的实现原理。ArrayList是基于数组结构实现的,而LinkedList是...

    List、ArrayList、Vector及map、HashTable、HashMap分别的区别

    ArrayList和LinkedList是两种常用的List实现类。ArrayList实现了可变大小的数组,它允许所有元素,包括null。ArrayList没有同步。size、isEmpty、get、set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个...

    ArrayList、ArrayDeque与LinkedList区别md,学习代码

    ArrayList是Java集合框架中的一个类,它实现了List接口。ArrayList基于动态数组实现,其内部维护了一个Object类型的数组。ArrayList的主要特点是随机访问速度快,因为通过索引可以直接获取元素。但是,插入和删除...

    毕业设计源码之ArrayList,LinkList链表接口实现.zip

    1. **集合框架理解**:深入理解Java集合框架,包括List接口、Set接口和Map接口,以及它们的实现类如ArrayList、LinkedList、HashSet、HashMap等。 2. **ArrayList与LinkedList的区别**:对比分析ArrayList和...

    10个Java经典的List面试题

    Vector 是 List 接口下的线程安全的集合,Vector 中的所有方法都是 synchronized 的,而 List 是一个接口,具有多种实现类,Vector 是 List 的一个实现类。 3. List 是有序的吗? List 是有序的,因为 List 中的...

    java集合类详解(set list ArrayList等java集合类详述)

    Collection 接口没有实现类,因此需要通过其子接口来实现。 Set 是一个不能包含重复元素的集合,SortedSet 是一个按照升序排列元素的 Set。List 是一个有序的集合,可以包含重复的元素,并提供了按索引访问的方式。...

    JSP应用开发-Java集合类-List接口.pptx

    List接口是Collection的子接口,用来包含一组有序有重复的对象,List有两种主要的集合实现类:ArrayList和LinkedList。ArrayList适合随机查询的场合,而LinkedList元素的插入和删除操作性高,两者在实际应用中都有其...

    ArrayList-LinkedList:ArrayList和LinkedList的完整演示

    在Java编程语言中,ArrayList和LinkedList是两种常用的集合类,它们都实现了List接口,用于存储和操作有序的数据序列。这两个类各有特点,适用于不同的场景。本文将深入探讨ArrayList和LinkedList的内部实现、性能...

    Java容器类List、ArrayList、Vector及map、HashTable应用

    Collection接口有两个直接实现:List和Set。List是有序的Collection,使用索引来访问元素,而Set是无序的Collection,使用equals方法来比较元素。 List接口提供了很多有用的方法,例如get、set、add、remove等,...

    对于java集合类的一个简单介绍

    ArrayList和LinkedList是List接口的两个常用的实现类,而HashSet和TreeSet是Set接口的两个常用的实现类。Iterator是一种设计模式,提供了遍历集合的能力。Collection接口是Java集合类中最高级的接口,提供了基本的...

    java毕业设计之ArrayList,LinkList链表接口实现源码.zip

    在本Java毕业设计项目中,主要探讨了两种重要的数据结构——ArrayList和LinkedList,它们都是Java集合框架中的核心组件,属于List接口的实现类。ArrayList和LinkedList各有特点,适合不同的应用场景,理解并掌握这两...

Global site tag (gtag.js) - Google Analytics