Java集合框架(Collections Framework)(2)

contains(object obj):是否包含某对象元素。判断的依据仍然是equals()方法。 Collection coll = new ArrayList(); coll.add(new Integer(128)); System.out.println(coll.contains(new Integer(128))); //true

isEmpty():集合是否不包含任何元素。

size():返回该集合中元素的个数。

equals(Object obj):比较两个集合是否完全相等。依据是集合中的所有元素都能通过各自的equals得到相等的比较。

addAll(Collection c):将整个集合c中的元素都添加到该集合中。

containsAll(Collection c):该集合是否包含了c集合中的所有元素,即集合c是否是该集合的子集。

removeAll(Collection c):删除该集合中那些也包含在c集合中的元素。即删除该集合和c集合的交集元素。

retainAll(Collection c):和removeAll()相反,仅保留该集合中和集合c交集部分的元素。

iterator(Collection c):返回此集合中的迭代器,注意返回值类型为Iterator。迭代器用于遍历集合。见下文。

Iterator通用迭代器

因为不同类型的集合存储数据时数据结构不同,想要写一个通用的遍历集合的方法是不现实的。但无论是哪种类型的集合,只有集合自身对集合中的元素是最了解的,因此在实现Collection接口时,不同集合类都实现了自己独有的遍历方法,这称为集合的迭代器Iterator。其实Collection继承了java.lang.Iterable接口,该接口只提供了一个方法:iterator(),只要是实现了这个接口的类就表示具有迭代的能力,也就具有foreach增强遍历的能力。

迭代器自身是一个接口,通过Collection对象的iterator()方法就可以获取到对应集合类型的迭代器。例如:

Collection coll = new ArrayList(); Iterator it = coll.iterator(); //获取对应类型的集合的迭代器

Iterator接口提供了3个方法:

hasNext():判断是否有下一个元素。

Next():获取下一个元素。注意它返回的是Object(暂不考虑泛型)类型。

remove():移除迭代器最后返回的一个元素。此方法为Collection迭代过程中修改元素的唯一安全的方法。

虽然有不同种类型的集合,但迭代器的迭代方法是通用的。例如,要遍历coll集合中的元素。

import java.util.*; public class TestColl { public static void main(String[] args) { Collection coll = new ArrayList(); coll.add("abcd"); coll.add(new Integer(129)); coll.add(new Student("Gaoxiaofang",23)); Iterator it = coll.iterator(); while (it.hasNext()) { //Iterator遍历的方法 System.out.println(it.next()); //return:abcd,129,Gaoxiaofang 23 } } } class Student { private String name; private int age; Student(String name,int n) { this.name = name; this.age = n; } public String getName() { return this.name; } public int getAge() { return this.age; } public String toString() { return this.name + " " + this.age; } }

但是通常来说,上面的遍历方式虽然正确,但下面的遍历方式更佳。因为it对象只用于集合遍历,遍历结束后就应该消失,所以将其放入到for循环的内部,由于for循环的第三个表达式缺失,所以不断地循环第二个表达式即可。

for (Iterator it = coll.iterator();it.hasNext();) { System.out.println(it.next()); }

通过Iterator遍历到的元素是集合中的一个对象,对象也是有属性的。如何引用这些属性?只需将遍历出的元素作为对象来使用即可,但由于next()返回的元素都是Object对象,直接操作这个元素对象无法获取对应元素中的特有属性。因此必须先强制对象类型转换。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/349b058e608364c69d6a7c8d05332c22.html