ArrayList源代码分析
在util包内
package java.util;
继承AbstractList,实现List ,RandomAccess,Cloneable,Serializable
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
属性:
private transient Object[] elementData; //对象数组
private int size; //长度
方法:
//构造方法
public ArrayList(int initialCapacity) { //initialCapacity为初始分配容量
super(); //父类实现 为空方法
if (initialCapacity < 0) //正数判断
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity]; //分配数组
}
public ArrayList() {
this(10); //无参构造方法,带10个容量
}
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
public void trimToSize() { //将此 ArrayList 实例的容量调整为列表的当前大小。
modCount++;
int oldCapacity = elementData.length;
if (size < oldCapacity) {
elementData = Arrays.copyOf(elementData, size);
}
}
调整容量大小
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
返回容量大小
public int size() {
return size;
}
判断是否为空
public boolean isEmpty() {
return size == 0;
}
是否包含元素
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
查找第一个相同元素的位置
public int indexOf(Object o) {
if (o == null) { //如果为空
for (int i = 0; i < size; i++) //遍历数组
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++) //遍历数组
if (o.equals(elementData[i]))
return i;
}
return -1; //找不到返回-1
}
查找最后一个相同元素的位置
public int lastIndexOf(Object o) {
if (o == null) { //如果为空
for (int i = size-1; i >= 0; i--) //遍历数组
if (elementData[i]==null)
return i;
} else {
for (int i = size-1; i >= 0; i--) //遍历数组
if (o.equals(elementData[i]))
return i;
}
return -1; //找不到返回-1
}
分享到:
相关推荐
### ArrayList源代码解析 在Java集合框架中,`ArrayList`是一个非常重要的类,它实现了`List`接口,并提供了基于动态数组的数据结构。本篇将详细分析`ArrayList`的源码,帮助读者理解其内部实现机制。 #### 类定义...
这样,DataGrid才能正确地解析ArrayList中的对象并显示其属性。 在实际开发中,考虑到类型安全和性能,使用强类型的数据结构(如List)和数据绑定(如BindingSource)通常会更佳。但如上所述,当处理旧代码或有特殊...
4. **集合框架**:Java集合框架包括ArrayList、LinkedList、HashSet、HashMap等,它们在源代码中会被广泛应用,用于数据的存储和操作。 5. **输入/输出流**:Java的I/O流系统广泛用于文件读写、网络通信等场景,源...
Java源代码解析是深入理解Java编程语言的关键步骤,它涉及到语法、类库、设计模式以及程序执行流程等多个方面。在Java编程中,源代码是程序员用Java语言编写的文本文件,通常以.java为扩展名。当这些源代码被Java...
Java程序设计语言源代码是学习和理解Java技术体系的重要途径,尤其对于开发者而言,阅读和分析源代码能够深化对语言特性的理解,提高编程技能。Java作为一种广泛使用的面向对象编程语言,其源代码包含了丰富的编程...
4. **集合框架**:Java集合框架包括ArrayList, LinkedList, HashMap等,源代码可能会有对这些数据结构的使用示例,帮助理解它们的特性和应用场景。 5. **输入/输出流**:I/O流在Java中用于读写文件或网络通信,源...
通过分析这部分源代码,开发者可以了解.NET Framework如何实现这些常用功能,以及如何优化性能和处理异常。 2. **mscorlib**: 这是.NET Framework的基础类库,包括了.NET Framework的核心类型,如System.Object、...
4. **集合框架**:Java的集合框架是处理数据的重要工具,源代码可能包含ArrayList、LinkedList、HashMap、HashSet等集合的使用,展示了如何存储和操作数据集。 5. **输入/输出(I/O)**:源代码可能会包含对文件的...
下面我们将详细探讨这些源代码所涵盖的知识点,并结合Java的核心特性进行解析。 1. **类与对象**:在Java中,一切皆为对象,而类是创建对象的蓝图。源代码中会展示如何定义类,包括类的属性(成员变量)和行为...
源代码分析有助于理解它们的内部实现和性能特性。 3. **异常处理**:Java的异常处理机制通过try-catch-finally语句块确保程序的健壮性。源代码揭示了异常是如何被抛出、捕获和处理的。 4. **多线程**:Java提供了...
Java编程语言是软件开发领域广泛使用的...通过下载并分析这些Java教程源代码,你可以逐步掌握Java编程技能,同时加深对各种编程概念的理解。实践中学习是提升编程能力的最好方式,因此,不要错过这个宝贵的学习资源。
通过分析和运行这些源代码,学习者可以逐步掌握C#的编程技巧,提高解决问题的能力。同时,对于初学者来说,阅读他人的代码也是提升编程思维和代码风格的重要途径。因此,这个包含所有书中源代码的压缩包无疑是一个...
这份"java大全书上源代码2"的压缩包,很可能是书中下半部分讲解的实例代码,涵盖了更多高级主题和应用。 源代码是程序员理解编程思想、学习语言特性的关键。通过阅读和实践这些源代码,你可以深入学习Java的各种...
《Visual Basic 2012入门经典》是一本...通过分析和实践这些源代码,读者不仅能掌握VB2012的基本语法,还能了解实际项目开发中的最佳实践。不断实验和修改代码,将有助于提升编程技巧,为今后的高级编程奠定坚实基础。
通过分析和实践这些源代码,初学者可以深入学习如何利用C#来解决实际问题,而有经验的开发者则能从中探索新的编程技巧和最佳实践。 标签"C#源码"直接指明了内容的性质,这是一系列可以直接查看、编译和运行的C#代码...
《Java语言程序设计》源...通过阅读和分析《Java语言程序设计》源代码,开发者不仅可以巩固理论知识,还能提升实际编程技能,理解如何将理论应用到实践中。这份资源对于Java初学者或有经验的开发者都是宝贵的参考资料。
本篇文章将详细解析这些源代码中涉及的关键知识点,以期帮助你更好地掌握Java编程。 1. **基础语法**:Java的基础语法包括数据类型(如整型、浮点型、字符型和布尔型)、变量、常量、运算符、流程控制(if语句、...
"250个Java源代码"这个压缩包很显然是为了帮助初学者和希望提升Java技能的开发者提供实践素材。这些源代码实例涵盖了Java的基础概念到进阶特性,是学习和理解Java语法、编程技巧以及解决问题的有效工具。 首先,...
通过分析和修改这些源代码,你可以更好地掌握Java编程的技巧和最佳实践。 在压缩包“Final”中,包含了上述所有知识点的源代码实例。建议按照书中的章节顺序逐步学习,每学完一个概念就尝试运行和理解对应的源代码...
源代码会演示如何操作ArrayList、LinkedList、HashSet、HashMap等,并理解它们之间的区别。 5. **IO流**:学习如何进行文件读写、对象序列化以及使用BufferedReader和PrintWriter等进行字符流处理。 6. **多线程**...