java中万物皆对象,数据封装成类,类创建对象,容器类似于存放对象的数组。容器较数组而言有以下特点:1、容器长度可变、数组在堆内存中创建后内存固定;2、容器可存放不同类型的对象,而数组元素类型在创建时需表明。两点归根结底即一点,数组内存在创建之初必须分配且不可变化。

集合作为工具,存放在java.util包中。其顶层特点由接口Collection封装。下面对其基本方法举例说明(由于接口需要继承后重写其方法,故使用实现接口的ArrayList类代替)。

import java.util.*;
public class Demo1 {
public static void out(Object obj){
System.out.println(obj);
}
public static void main(String[] args){
ArrayList al = new ArrayList();
/*添加数据方法add()*/
al.add("Collection1");
al.add("Collection2");
al.add("Collection3");
al.add("Collection4");
/*删除元素*/
al.remove(2);
/*集合长度*/
out("al.size:"+al.size());
/*集合元素*/
out(al);
}
}
运行结果:
al.size:3
[Collection1, Collection2, Collection4]

其中需要注意的是集合中存放的不是集合中存储对象的全部,而是对象的引用,即地址。

在Collection接口中还有一个较为特殊的方法:iterator()迭代器,返回值为Iterator类型的接口。

迭代器用于集合中元素的取出操作。java中集合有多种,而每种集合都是需要元素取出操作且大致处理过程保存一致:先判断集合是否还有元素,若有,继续取出。于是,将该功能提升封装,由于是附加功能,封装成接口,由类implements实现。查看java.util.AbstractList源码如下:

public Iterator iterator() {
return new Itr();
}
{
。。。
private class Itr implements Iterator {
。。。
public boolean hasNext() {
return cursor != size();
}
public E next() {
。。。
}
public void remove() {
。。。
}
。。。
}

java中使用一内部类实现Iterator接口,在内部类中重写了三方法。定义内部类在于该方法存在于AbstractList类内部,且需要操作该类中私有数据。最后java提供iterator方法访问迭代器方法。如下:

Iterator it = al.iterator();
while(it.hasNext()){
out(it.next());
}

java集合类库构成了集合类的框架,Collection是基本的接口,List体系和Set体系是其常见的两种子类接口。List集合中元素有序,元素可以重复,因为每个元素对应唯一索引。Set集合中存储的对象无序,元素则不可重复。

List体系中常见的类有三种:ArrayList、LinkedList、Vector。ArrayList集合中元素存储结构为数组型,易于元素的查询操作,增删操作则随着元素个数的增加而复杂。LinkedList类中元素数据结构是双链表。增删容易查询难。Vector类存储方式也为数组,其渐渐被ArrayList代替,二者所不同在于Vector集合是同步而ArrayList不同步,当多线程对ArrayList对象进行操作时,有可能引发异常。如ArrayList对象和ArrayList列表迭代器同时作出修改操作时,报ConcurrentModificationException异常。

package CollectionDemo;
import java.util.*;
public class Demo1 {
public static void out(Object obj){
System.out.println(obj);
}
public static void method(){
ArrayList al = new ArrayList();
ListIterator lt = al.listIterator();
al.add("sb1");
lt.add("sb2");
out(al);
}
public static void main(String[] agrs){
method();
}
}
运行结果:
Exception in thread "main" java.util.ConcurrentModificationException...
List体系中拥有唯一的列表迭代器ListIterator,通过List对象ListIterator()可获得对象的列表迭代器,基于List体系中元素索引一一对应的特性,其内封装的方法可以实现对应下标元素的增删改查操作,具体可查API文档。