java集合类

  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<E> iterator() {
        return new Itr();
    }
 {  
  。。。
  private class Itr implements Iterator<E> {
     。。。
        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文档。

  

posted @ 2015-11-17 16:41  百无一用此书生  阅读(128)  评论(0编辑  收藏  举报