List 接口有两个实现类,ArrayList 与LinkedList
如果排序用ArrayList 如果经常删写改 操作用 LinkedList,为什么会有这样一说法呢,我们从两个类的源码来分析。
ArrayList:
如果排序用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>(null, null, null);
以对象链表存储数据
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 是 Java 中常用的数据结构实现类,它们都实现了 List 接口,但它们在存储方式、性能、线程安全性等方面有着不同特点。 首先,ArrayList 和 Vector 都是采用数组方式存储数据的,这种...
在IT领域,特别是Java编程中,ArrayList和LinkedList是两种非常重要的数据结构,它们都是List接口的实现类。理解这两者的区别对于优化程序性能至关重要。面试官询问这些知识点,旨在评估应聘者的理论基础和实践能力...
ArrayList和LinkedList是List接口的两种主要实现,它们各有优缺点,适用于不同的场景。此外,匿名类的概念在Java中用于简化代码结构,尤其是在实现接口时。 1. **List接口** List接口继承自Set接口,它不仅提供了...
这三个类都实现了List接口,提供了多种操作方法,但它们在内部实现和性能特性上有所不同。这篇性能测试着重探讨了这三者在随机读取、插入和删除操作时的表现。 1. ArrayList: ArrayList是基于数组实现的列表,它...
"java 集合之实现类ArrayList和LinkedList的方法" Java 集合框架中,ArrayList 和 LinkedList 是两种常用的实现类,分别实现了 List 接口。下面我们将详细介绍这两种实现类的方法。 ArrayList ArrayList 是一个...
ArrayList和LinkedList是Java集合框架中两种重要的动态数组实现,它们都是List接口的实现类,但它们在存储和操作数据方面有着显著的区别。本文件"arraylist-linkedlist-test.zip"主要探讨了在执行添加和删除元素操作...
总结来说,理解`List`接口及其常用实现类如`ArrayList`和`LinkedList`的特性是Java开发中必不可少的知识点。正确选择和使用这些数据结构能够显著提高程序的效率和可读性。同时,根据具体需求,利用`LinkedList`实现...
在 Java 中,ArrayList 和 LinkedList 是两个常用的集合类,它们都是 List 接口的实现类,但它们之间有着鲜明的区别。今天,我们将深入探讨这两个集合类的实现原理和比较。 ArrayList 的实现原理 ArrayList 是基于...
在Java集合框架中,Vector、ArrayList和LinkedList是三种常见的List接口实现类,它们各自具有不同的特点和适用场景。下面我们将详细对比这三个类的区别。 1. **Vector** - **线程安全**:Vector是线程安全的,因为...
ArrayList和LinkedList是java中两个常用的实现List接口的类,它们之间的性能比较是一个非常重要的知识点。 首先,让我们来了解ArrayList和LinkedList的实现原理。ArrayList是基于数组结构实现的,而LinkedList是...
ArrayList和LinkedList是两种常用的List实现类。ArrayList实现了可变大小的数组,它允许所有元素,包括null。ArrayList没有同步。size、isEmpty、get、set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个...
ArrayList是Java集合框架中的一个类,它实现了List接口。ArrayList基于动态数组实现,其内部维护了一个Object类型的数组。ArrayList的主要特点是随机访问速度快,因为通过索引可以直接获取元素。但是,插入和删除...
1. **集合框架理解**:深入理解Java集合框架,包括List接口、Set接口和Map接口,以及它们的实现类如ArrayList、LinkedList、HashSet、HashMap等。 2. **ArrayList与LinkedList的区别**:对比分析ArrayList和...
Vector 是 List 接口下的线程安全的集合,Vector 中的所有方法都是 synchronized 的,而 List 是一个接口,具有多种实现类,Vector 是 List 的一个实现类。 3. List 是有序的吗? List 是有序的,因为 List 中的...
Collection 接口没有实现类,因此需要通过其子接口来实现。 Set 是一个不能包含重复元素的集合,SortedSet 是一个按照升序排列元素的 Set。List 是一个有序的集合,可以包含重复的元素,并提供了按索引访问的方式。...
List接口是Collection的子接口,用来包含一组有序有重复的对象,List有两种主要的集合实现类:ArrayList和LinkedList。ArrayList适合随机查询的场合,而LinkedList元素的插入和删除操作性高,两者在实际应用中都有其...
在Java编程语言中,ArrayList和LinkedList是两种常用的集合类,它们都实现了List接口,用于存储和操作有序的数据序列。这两个类各有特点,适用于不同的场景。本文将深入探讨ArrayList和LinkedList的内部实现、性能...
Collection接口有两个直接实现:List和Set。List是有序的Collection,使用索引来访问元素,而Set是无序的Collection,使用equals方法来比较元素。 List接口提供了很多有用的方法,例如get、set、add、remove等,...
ArrayList和LinkedList是List接口的两个常用的实现类,而HashSet和TreeSet是Set接口的两个常用的实现类。Iterator是一种设计模式,提供了遍历集合的能力。Collection接口是Java集合类中最高级的接口,提供了基本的...
在本Java毕业设计项目中,主要探讨了两种重要的数据结构——ArrayList和LinkedList,它们都是Java集合框架中的核心组件,属于List接口的实现类。ArrayList和LinkedList各有特点,适合不同的应用场景,理解并掌握这两...