java集合——ArrayList
简介
ArrayList是 java 集合框架中比较常用的数据结构了。继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化。允许null存在。同时显现RandomAccess(快速访问),Cloneable(复制),Serializable(序列化)。
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
成员变量
ArrayList底层是基于数组来实现。该数组的容量大小是动态变化的
主要成员变量
/**
* 默认的初始化大小10
*/
private static final int DEFAULT_CAPACITY = 10;
/**
* 实际存放对象的数组
*/
transient Object[] elementData; // non-private to simplify nested class access
/**
*实际的数组大小(数组中实际元素的个数)
*/
private int size;
构造方法
无参构造方法
public ArrayList() {… }
无参构造方法,elementData生成一个空数组,会在第一次新增元素时,初始化成10大小的数组
//无参构造方法 DEFAULTCAPACITY_EMPTY_ELEMENTDATA是一个
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
有参构造
public ArrayList(int initialCapacity) {…}
把elementData 生成你传过来参数(initialCapacity)大小的数组
//有参构造方法(参数:数组的大小)
public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
this.elementData = EMPTY_ELEMENTDATA;//EMPTY_ELEMENTDATA空数组
} else {
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}
public ArrayList(Collection<? extends E> c) {…}
把传进来的集合复制到该数组中
/**
* 构造一个包含指定元素的列表集合的ArrayList
*/
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
if ((size = elementData.length) != 0) {
// 为了保持对象的不变(如原集合对象时Integer,生成的新集合对象也是Integer)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
this.elementData = EMPTY_ELEMENTDATA;
}
}
常用方法
方法名称 | 解释 |
---|---|
boolean add(E e) | 新增对象 |
void add(int index,E e) | 把元素插入到指定位置(注意:不是替换) |
E get(int index) | 得到指定位置元素 |
E remove(int index) | 删除指定位置元素 |
boolean remove(Object o) | 删除指定元素(注意:只删除在数组中位置靠前的一个相等元素) |
int size() | 返回 arraylist 里元素数量 |
boolean isEmpty() | 判断 arraylist 是否为空 |
void sort(Comparator<? super E> c) | 对 arraylist 元素进行排序 |
package com.java.demo;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class UseArrayList {
public static void main(String[] args){
List<Integer> myArrayList = new ArrayList<Integer>();
myArrayList.add(1);
myArrayList.add(2);
myArrayList.add(3);
myArrayList.add(3);
myArrayList.add(2);
myArrayList.add(1);
System.out.println(myArrayList.toString());//[1, 2, 3, 3, 2, 1]
myArrayList.add(2,4);
System.out.println(myArrayList.toString());//[1, 2, 4, 3, 3, 2, 1]
System.out.println(myArrayList.get(2));//4
myArrayList.remove(1);
System.out.println(myArrayList.toString());//[1, 4, 3, 3, 2, 1]
myArrayList.remove(new Integer(3));
System.out.println(myArrayList.toString());//[1, 4, 3, 2, 1]
System.out.println(myArrayList.size());//5
System.out.println(myArrayList.isEmpty());//false
myArrayList.sort(new Comparator<Integer>() {
/*根据java源代码,可以知道内部规定:
*compare方法大于0,就把前一个数和后一个数交换,如果小于等于0就保持原位置,不进行交换。
*/
@Override
public int compare(Integer o1, Integer o2) {
return (o1.intValue() < o2.intValue())?-1:0;
}
});
System.out.println(myArrayList.toString());//[1, 1, 2, 3, 4]
}
}
建议直接看JAVA源码ArrayList
站在巨人的肩上:
java ArrayList|菜鸟教程
ArrayList详解,看这篇就够了