`

ArrayList源代码分析

阅读更多
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源代码

    ### ArrayList源代码解析 在Java集合框架中,`ArrayList`是一个非常重要的类,它实现了`List`接口,并提供了基于动态数组的数据结构。本篇将详细分析`ArrayList`的源码,帮助读者理解其内部实现机制。 #### 类定义...

    使用对象ArrayList填充DataGrid,C#源代码ArrayList MyList = new ArrayList();

    这样,DataGrid才能正确地解析ArrayList中的对象并显示其属性。 在实际开发中,考虑到类型安全和性能,使用强类型的数据结构(如List)和数据绑定(如BindingSource)通常会更佳。但如上所述,当处理旧代码或有特殊...

    164个完整的Java程序源代码

    4. **集合框架**:Java集合框架包括ArrayList、LinkedList、HashSet、HashMap等,它们在源代码中会被广泛应用,用于数据的存储和操作。 5. **输入/输出流**:Java的I/O流系统广泛用于文件读写、网络通信等场景,源...

    JAVA源代码解析JAVA源代码解析

    Java源代码解析是深入理解Java编程语言的关键步骤,它涉及到语法、类库、设计模式以及程序执行流程等多个方面。在Java编程中,源代码是程序员用Java语言编写的文本文件,通常以.java为扩展名。当这些源代码被Java...

    Java程序设计语言源代码

    Java程序设计语言源代码是学习和理解Java技术体系的重要途径,尤其对于开发者而言,阅读和分析源代码能够深化对语言特性的理解,提高编程技能。Java作为一种广泛使用的面向对象编程语言,其源代码包含了丰富的编程...

    Java自学程序源代码

    4. **集合框架**:Java集合框架包括ArrayList, LinkedList, HashMap等,源代码可能会有对这些数据结构的使用示例,帮助理解它们的特性和应用场景。 5. **输入/输出流**:I/O流在Java中用于读写文件或网络通信,源...

    .net 官方部分源代码 

    通过分析这部分源代码,开发者可以了解.NET Framework如何实现这些常用功能,以及如何优化性能和处理异常。 2. **mscorlib**: 这是.NET Framework的基础类库,包括了.NET Framework的核心类型,如System.Object、...

    java编程思想第四版源代码.7z

    4. **集合框架**:Java的集合框架是处理数据的重要工具,源代码可能包含ArrayList、LinkedList、HashMap、HashSet等集合的使用,展示了如何存储和操作数据集。 5. **输入/输出(I/O)**:源代码可能会包含对文件的...

    Java面向对象程序设计课本例题源代码

    下面我们将详细探讨这些源代码所涵盖的知识点,并结合Java的核心特性进行解析。 1. **类与对象**:在Java中,一切皆为对象,而类是创建对象的蓝图。源代码中会展示如何定义类,包括类的属性(成员变量)和行为...

    java核心技术源代码

    源代码分析有助于理解它们的内部实现和性能特性。 3. **异常处理**:Java的异常处理机制通过try-catch-finally语句块确保程序的健壮性。源代码揭示了异常是如何被抛出、捕获和处理的。 4. **多线程**:Java提供了...

    java一些教程源代码下载

    Java编程语言是软件开发领域广泛使用的...通过下载并分析这些Java教程源代码,你可以逐步掌握Java编程技能,同时加深对各种编程概念的理解。实践中学习是提升编程能力的最好方式,因此,不要错过这个宝贵的学习资源。

    c# 程序源代码

    通过分析和运行这些源代码,学习者可以逐步掌握C#的编程技巧,提高解决问题的能力。同时,对于初学者来说,阅读他人的代码也是提升编程思维和代码风格的重要途径。因此,这个包含所有书中源代码的压缩包无疑是一个...

    java大全书上源代码2

    这份"java大全书上源代码2"的压缩包,很可能是书中下半部分讲解的实例代码,涵盖了更多高级主题和应用。 源代码是程序员理解编程思想、学习语言特性的关键。通过阅读和实践这些源代码,你可以深入学习Java的各种...

    Visual Basic 2012入门经典 源代码

    《Visual Basic 2012入门经典》是一本...通过分析和实践这些源代码,读者不仅能掌握VB2012的基本语法,还能了解实际项目开发中的最佳实践。不断实验和修改代码,将有助于提升编程技巧,为今后的高级编程奠定坚实基础。

    C#源代码大全(基于C#程序设计的源程序)

    通过分析和实践这些源代码,初学者可以深入学习如何利用C#来解决实际问题,而有经验的开发者则能从中探索新的编程技巧和最佳实践。 标签"C#源码"直接指明了内容的性质,这是一系列可以直接查看、编译和运行的C#代码...

    《Java语言程序设计》源代码

    《Java语言程序设计》源...通过阅读和分析《Java语言程序设计》源代码,开发者不仅可以巩固理论知识,还能提升实际编程技能,理解如何将理论应用到实践中。这份资源对于Java初学者或有经验的开发者都是宝贵的参考资料。

    Java核心技术第八版源代码

    本篇文章将详细解析这些源代码中涉及的关键知识点,以期帮助你更好地掌握Java编程。 1. **基础语法**:Java的基础语法包括数据类型(如整型、浮点型、字符型和布尔型)、变量、常量、运算符、流程控制(if语句、...

    250个java源代码

    "250个Java源代码"这个压缩包很显然是为了帮助初学者和希望提升Java技能的开发者提供实践素材。这些源代码实例涵盖了Java的基础概念到进阶特性,是学习和理解Java语法、编程技巧以及解决问题的有效工具。 首先,...

    java 从入门到精通 源代码

    通过分析和修改这些源代码,你可以更好地掌握Java编程的技巧和最佳实践。 在压缩包“Final”中,包含了上述所有知识点的源代码实例。建议按照书中的章节顺序逐步学习,每学完一个概念就尝试运行和理解对应的源代码...

    CoreJava 一书的所有配套源代码

    源代码会演示如何操作ArrayList、LinkedList、HashSet、HashMap等,并理解它们之间的区别。 5. **IO流**:学习如何进行文件读写、对象序列化以及使用BufferedReader和PrintWriter等进行字符流处理。 6. **多线程**...

Global site tag (gtag.js) - Google Analytics