1.ArrayList
数据结构:数组,默认长度为10;
/** * Shared empty array instance used for empty instances. */ private static final Object[] EMPTY_ELEMENTDATA = {};
/** * Constructs an empty list with an initial capacity of ten. */ public ArrayList() { super(); this.elementData = EMPTY_ELEMENTDATA; }以*2的方式增长list长度,长度最长为Integer.MAX_VALUE - 8
/** * Increases the capacity to ensure that it can hold at least the * number of elements specified by the minimum capacity argument. * * @param minCapacity the desired minimum capacity */ private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); }
get(i)/set(i,e)/add(e)操作性能很高,这是数组的基本优势
/** * Returns the element at the specified position in this list. * * @param index index of the element to return * @return the element at the specified position in this list * @throws IndexOutOfBoundsException {@inheritDoc} */ public E get(int index) { rangeCheck(index); return elementData(index); }add(i,e), remove(i), remove(e)需要使用System.arraycopy()来移动数据,性能相对较差
/** * Inserts the specified element at the specified position in this * list. Shifts the element currently at that position (if any) and * any subsequent elements to the right (adds one to their indices). * * @param index index at which the specified element is to be inserted * @param element element to be inserted * @throws IndexOutOfBoundsException {@inheritDoc} */ public void add(int index, E element) { rangeCheckForAdd(index); ensureCapacityInternal(size + 1); // Increments modCount!! System.arraycopy(elementData, index, elementData, index + 1,size - index); elementData[index] = element; size++; }
2.LinkedList
数据结构:双向链表
private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }
get(i)/set(i,e)操作,需要移动链表指针性能一般
/** * Replaces the element at the specified position in this list with the * specified element. * * @param index index of the element to replace * @param element element to be stored at the specified position * @return the element previously at the specified position * @throws IndexOutOfBoundsException {@inheritDoc} */ public E set(int index, E element) { checkElementIndex(index); Node<E> x = node(index); E oldVal = x.item; x.item = element; return oldVal; }add(), addFirst(),removeLast()在链表两头的操作,无需移动指针,性能较好
/** * Appends the specified element to the end of this list. * * <p>This method is equivalent to {@link #addLast}. * * @param e element to be appended to this list * @return {@code true} (as specified by {@link Collection#add}) */ public boolean add(E e) { linkLast(e); return true; }
3.CopyOnWriteArrayList
构造:数组,线程安全的ArrayList,采用副本拷贝的方式来操作集合,使用iterators迭代器时不支持set和remove操作,因为其在源集合操作
/** * Creates a list holding a copy of the given array. * * @param toCopyIn the array (a copy of this array is used as the * internal array) * @throws NullPointerException if the specified array is null */ public CopyOnWriteArrayList(E[] toCopyIn) { setArray(Arrays.copyOf(toCopyIn, toCopyIn.length, Object[].class)); }get(i),set(i,e)都操作的拷贝副本,set(i,e)采用lock锁保证线程安全
/** * Replaces the element at the specified position in this list with the * specified element. * * @throws IndexOutOfBoundsException {@inheritDoc} */ public E set(int index, E element) { final ReentrantLock lock = this.lock; lock.lock(); try { Object[] elements = getArray(); E oldValue = get(elements, index); if (oldValue != element) { int len = elements.length; Object[] newElements = Arrays.copyOf(elements, len); newElements[index] = element; setArray(newElements); } else { // Not quite a no-op; ensures volatile write semantics setArray(elements); } return oldValue; } finally { lock.unlock(); } }
4.随机笔记
Eclipse快速查找类:ctrl+shift+t
5.后记
我的其他经常博客:http://blog.csdn.net/caicongyang
记录与分享,让你我共成长 from caicongyang
相关推荐
在这个主题中,我们将深入分析集合框架的源码,理解其内部工作原理,以便更好地利用这些工具进行开发。 1. **接口与实现** Java集合框架主要包括`Collection`、`List`、`Set`和`Map`四大接口。`Collection`是最...
Java集合框架源码分析 Java集合框架是Java语言中一个非常重要的组件,提供了多种数据结构和算法来存储和操作数据。在Java集合框架中,LinkedList、ArrayList、HashMap、TreeMap等都是非常常用的数据结构。本文将对...
在.NET框架中,C#语言提供了丰富的数据结构和容器,其中最常用且强大的就是List、Dictionary和HashSet等泛型集合。这些集合类是基于泛型的,能够提供类型安全的数据存储,大大增强了代码的可读性和效率。接下来,...
这些方法的实现都与List的具体实现有关,理解和分析源码能帮助我们优化代码性能和解决问题。 总的来说,深入学习List接口及其实现类的源码对于理解Java集合框架的工作原理至关重要。通过研究源码,我们可以更好地...
3. 集合类的实现:分析List类和Map类的内部结构,理解它们如何存储和操作数据。 4. 面向接口编程:虽然易语言没有像Java那样的接口概念,但可以通过模拟接口的实现,提供类似的功能。 5. 键值对操作:了解如何在Map...
本文将深入探讨两种流行的ORM(Object-Relational Mapping)框架——LitePal和GreenDao,它们可以帮助开发者简化数据库操作,特别是对于存储List集合数据的情况。 LitePal是一款轻量级的Android数据库框架,它基于...
创建`List<T>`实例非常简单,可以通过以下方式: ```csharp List<int> numbers = new List(); ``` 添加元素到`List<T>`中,可以使用`Add`方法: ```csharp numbers.Add(1); numbers.Add(2); numbers.Add(3); ``` ...
在给定的压缩包文件中,包含了一些关键的集合类源码,如`TreeMap`、`Hashtable`、`ArrayList`、`HashMap`、`LinkedList`、`List`、`Map`、`TreeSet`、`LinkedHashMap`和`Set`。这些类都是Java集合框架的重要组成部分...
在本文中,我们将全面分析Java集合框架的核心概念和实现细节。 首先,Java集合框架的基础是`Collection`接口,它是所有集合类的根接口,定义了集合的基本操作。`Collection`接口有两个重要的子接口:`List`和`Set`...
单列集合中,Set接口的集合主要用于存储不重复的元素,而List接口的集合则可以存储重复的元素。双列集合则是指Map接口的集合,它存储的是键值对映射关系。 首先,Set集合是一个不允许重复元素的集合,它有多种实现...
List集合转换成String,String转List,Map转String,String转Map等 集合与字符串相互转换,可以自己扩展源码,带有注释
【JAVA案例集合源码】是一个综合性的资源,涵盖了Java编程语言的各种实际操作示例。这个压缩包中的源代码实例旨在帮助开发者深入理解Java的核心概念、语法特性以及在实际开发中的应用。下面,我们将详细探讨这些知识...
Freemarker 中遍历 List 集合实例 Freemarker 中遍历 List 集合实例是指在 ...Freemarker 中遍历 List 集合实例相关源码及文件下载 如果您在阅读本文的过程中发现问题,请通过留言的形式给与批评指正,谢谢!
首先,我们从基础开始,Java集合框架主要分为两大类:List(列表)和Set(集合)。List接口包括ArrayList、LinkedList和Vector等实现,它们保持元素的顺序,并允许重复元素。Set接口则包括HashSet、LinkedHashSet和...
Java平台提供了一个全新的集合框架,框架的核心为Collection、List(列表)、Set(集合)和Map(映射)。集合类的框架为集合的实现者提供了大量的接口和抽象类,并对其中的某些机制给予了描述,例如,Iterator(迭代...
Java集合框架是Java编程中非常重要的部分,它提供了一种高效、灵活的数据组织方式。本文主要探讨了几个关键...通过对源码的深入分析,我们可以更好地掌握Java集合框架的工作原理,并根据实际需求选择最适合的数据结构。
**标题:“Hibernate List集合映射”** 在Java的持久化框架Hibernate中,集合映射是将数据库中的表与Java对象的集合属性关联的过程。List集合映射是其中常见的一种方式,它允许我们将数据库中的一组相关记录映射到...
`List<T>`是泛型集合,提供了强类型的安全性和更好的性能,而`ArrayList`是.NET Framework早期版本的非泛型集合,兼容性较好但效率略低。 `MyList.cs`和`MyCollections.MyDataTable.csproj`可能是个人实现的列表类...