天天看点

Java学习笔记-集合接口

首先,集合类是什么呢?

简单说集合类就是 Java 中数据结构的实现。

在Java类库中,集合类的基本接口是collection接口。

这个接口有两个基本方法:

public interface Collection<E>{
	boolean add(E element);
	Iterator<E> iterator();//iterator是迭代器的意思
}
           

除了这两个方法,还有几个方法,将在稍后进行介绍:

add方法用于向集合中添加元素。如果添加元素确实改变了集合就返回true,反之返回false。例如如果试图向集合中添加一个对象,而这个对象在集合中已经存在,这个添加请求就没有实效,因为集合不允许有重复的对象。

iterator方法用于返回一个实现了Iterator接口的对象。可以使用这个迭代器对象一次访问集合中的元素。

1.迭代器

Iterator接口包含三个方法:

public interface Iterator<E>{
	E next();
	boolean hasNext();
	void remove();
}
           

想要查看集合中的所有元素,就请求一个迭代器,并在hasNext返回true时反复地调用next方法,例如:

Collection<String> c=...;
Iterator<String> iter=c.iterator();//注意一定要明确他们的关系。iterator方法是collection接口中的方法,其用于返回一个实现了Iterator接口的对象
while(iter.hasNext()){
	String element=iter.next();
	do something with element
}
           

Java集合类库中的迭代器与其他类库中的迭代器在概念上有着很大的区别。在传统的集合类库中,例如在C++的标准模板库中,迭代器是根据数组索引建模的。如果给定这样一个迭代器,就可以查看指定位置上的元素。但是Java迭代器不是这样操作的,查找操作与位置变更是紧密相连的。查找一个元素的唯一方法是调用next,而在执行查找操作的同时,迭代器的位置随之向后移动,因此,应该将Java的迭代器认为是位于两个元素之间。当调用next的时候,迭代器就越过下一个元素,并返回刚刚越过的那个元素的引用。

2.删除元素

Iterator接口的remove方法将会删除上次调用next方法所返回的元素。然而,如果想要删除指定位置上的元素,我们仍然需要去越过它。例如,下面是如何删除字符串集合中第一个元素的方法:

Iterator<String>it=c.iterator();
it.next();
it.remove();
           

更重要的是,对next方法和remove方法的调用具有相互依赖性。如果调用remove之前没有调用next将是不合法的。

如果想要删除两个不相邻的元素,不能直接地这样调用:

it.remove();
it.remove();
           

相反地,必须先调用next越过将要删除的元素。

it.remove();
it.next();
it.remove();