在Java中,集合这一数据结构应用广泛,应用最多的莫过于List接口下面的ArrayList和LinkedList;
我们先说List,
public interface List<E> extends Collection<E> {
//返回list集合中元素的数量,若数量大于Integer.MAX_VALUE,则返回Integer.MAX_VALUE
int size();
//判读集合内是否没有元素,若没有元素返回true
boolean isEmpty();
//判断集合内是否包含指定的元素o
boolean contains(Object o);
//以适当的序列,返回该集合元素中的一个迭代器
Iterator<E> iterator();
//返回一个数组,该数组包含该集合中所有的元素(以从first到last的顺序)
Object[] toArray();
//把集合中的元素放到数组a中,并返回
<T> T[] toArray(T[] a);
20
//向集合末尾中添加一个元素
boolean add(E e);
//从集合中删除第一个出现的元素o
boolean remove(Object o);
//判断集合中是否包含 指定集合c中的所有元素
boolean containsAll(Collection<?> c);
//将指定集合c中的所有元素都追加到 集合的末尾
boolean addAll(Collection<? extends E> c);
//将指定集合c中的所有元素都插入到 集合中,插入的开始位置为index
boolean addAll(int index, Collection<? extends E> c);
//将指定集合c中的所有元素从本集合中删除
boolean removeAll(Collection<?> c);
//本集合和 集合c的交集
boolean retainAll(Collection<?> c);
//清除集合中的元素
void clear();
//比较指定对象o和本集合是否相等,只有指定对象为list,size大小和本集合size一样,且每个元素equal一样的情况下,才返回true
boolean equals(Object o);
int hashCode();
//返回指定位置index的元素
E get(int index);
//将元素element设置到集合的index位置(替换)
E set(int index, E element);
//将元素element插入到集合的index位置
void add(int index, E element);
//移除指定位置index的元素
E remove(int index);
//返回指定对象o在本集合中的第一个索引位置
int indexOf(Object o);
//返回指定对象o在本集合中的最后一个索引位置
int lastIndexOf(Object o);
//返回一个ListIterator的迭代器
ListIterator<E> listIterator();
//从指定位置index开始返回一个ListInterator迭代器
ListIterator<E> listIterator(int index);
//返回从位置fromIndex开始到位置toIndex结束的子集合
List<E> subList(int fromIndex, int toIndex);
}
下面我们看一看ArrayList,ArrayList是基于数组的方式来实现数据的增加、删除、修改、搜索的。
ArrayList内部维护者两个变量:
//该数组缓存者集合中的元素,集合的容量就是该数组的长度,elementData用transient修饰,说明在序列化时,数组elementData不在序列化范围内。
private transient Object[] elementData;
//集合的大小 (集合中元素的数量)
private int size;
我们再看一看ArrayList的构造器:
/**
*构造一个指定容量initialCapacity的空的集合,
*super() 是调用AbstractList的默认构造器方法,该方法是一个空的方法,
*然后判断传入的参数initialCapacity不能小于0,否则就直接抛出非法参数异常;
*最后直接创建了一个长度为initialCapacity的数组对象,并将该对象赋值给当前实例的elementData属性,用以存放集合中的元素。
*/
public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
}
/**
*构造一个默认的容量为10的空的集合,我们平时最经常使用的List<T> list = new ArrayList<T>();是默认创建了容量为10的集合。
*/
public ArrayList() {
this(10);
}
/**
*构造一个包含了指定集合c中的所有元素的集合,该集合中元素的顺序是以集合c的迭代器返回元素的顺序。
*/
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[]
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}