您的位置:首页 > 编程语言 > Java开发

Java集合类3—迭代器和Collections类介绍

2011-10-16 12:47 204 查看
迭代器(Iterator)给我们提供了一种通用的方式来访问集合中的元素。Iterator在Java的帮助文档中我们可以知道,它提供了一个借口,并没有提供真正的Iterator类。Iterator是对collection 进行迭代的迭代器。在Java的Iterator借口中定义了三个方法:hasNext()如果仍有元素可以迭代,则返回true;next()返回迭代的下一个元素;remove()从迭代器指向的collection 中移除迭代器返回的最后一个元素(可选操作)。最后一个方法是可选的操作,但是我们知道在Java中借口必须实现所有的方法,那么这里是为什么呢?在Java中如果定义太多的借口的话,无形中会增加我们编程的难度。所以Java提供了对于方法的可选操作,也就是在继承该接口的类中可以实现该方法也可以不实现,如果不实现Java会抛出一个UnsupportedOperationException
异常。


我们可以认为迭代器Iterator是指向两个元素之间的位置,我们可以使用hasNext()来判断当前位置后面是否还有元素。使用next()方法返回后面的元素,并且将位置移动到下一个元素前的位置。对于remove方法我们删除的是当前位置前面的元素,所以我们在调用remove()方法之前必须先调用至少一次next()方法。这里所说的迭代器的位置在被迭代的对象中并不存在的,只是我们为了准确的说明这个方法,而假想出来的。


在Java中并没有真正的实现Iterator,那么我们怎样创建一个Iterator对象呢?Collection的间接实现类都有一个方法iterator()方法,返回的就是一个Iterator对象,我们可以使用这个方法去创建对象。下面我们举例说明一下:




//two
Three
在上面的程序中我们调用ArrayList的iterator方法返回一个Iterator迭代器,并用这个迭代器输出了结果。可能我们会想我们通过调用ArrayList类的size()方法得到元素的多少,用for循环照样可以输出,何必再去写这么一个接口呢。这样是为了我们可以使用通用的方法,去访问集合类中的元素。我们可以像类似下面的方法写一个迭代器通用输出方法:
Public voiddisplay(Collection c){
Iteratorit = c.iterator();
While(c.hasNext())
System.out.println(c.next());
}
到这里我们对迭代器Iterator已经有了一个初步的认识了,下面我们介绍一下Collections类,看清楚最后有一个“s”,不要和接口Collection混了。
Collections类完全由在 collection 上进行操作或返回 collection 的静态方法组成。它包含在 collection 上操作的多态算法,即“包装器”,包装器返回由指定collection 支持的新 collection,以及少数其他内容。这个类主要是针对集合类进行的操作,在这个类中有好多的方法都是比较实用的。读者可以参照Java的帮助文档学习里面的方法,我们这里只是介绍一下其中的sort方法。
在Java中Collections.sort方法是一个重载的方法,下面我们先看第一个—Collections.sort(集合类的对象)。我们知道集合类中存储的都是对象,我们利用这个方法可以对我们传入的集合类按照自然排序进行排序。要求传入的对象必须实现了Comparable接口。 Comparable接口有一个方法compareTo(obj)。这个方法是用于两个对象的比较。使用的时候a.compareTo(b)这样写,如果a>b返回大于1的数值,如果a=b返回0,如果a<b返回大于0的值。在我们使用集合类的sort方法的时候,会自动按照这个方法进行比较而排序。下面我们看一个例子:



//1

2

3

下面我们介绍sort方法的另一个重载方法,它需要两个参数分别是集合类和一个比较器。比较器是java.util包中的叫做Comparator,这是一个接口。我们要创建比较器需要实现这个接口。这个接口有两个方法compare和equalsTo方法。但是一般情况下我们只需要实现第一个,第二个可以不用实现。因为在Object类中已经实现了equalsTo方法,我们的类都默认继承了Object类,所以也都继承了equalsTo方法。

omparator接口中compare方法的定义:int compare(对象 o1,对象 o2),返回的是o1>o2?1(o1==o2?0:-1)。我们有时候会需要几种比较方法我们可以多创建几个比较器。然后调用Collections.sort方法传入我们需要排序的集合类和用到的比较器。我们传入的比较器的统统排序的结果也不同,这里我们就不用例子来详细介绍了,大家自己去写代码实践一下。

本次就先到这里,希望对你有帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: