如何从一个容器中取出元素?因为每个容器的内部数据结构不一样,取出的细节也不一样,容器都有共性的内容:取出和判断。所以在容器中定义了内部类用来取出容器的元素
,集合中的内部类都符合一个规则,将些共性取出,这个规则就是迭代器
迭代器(Iterator)有三个方法:
(1) 使用next()获得序列中的下一个元素。
(2) 使用hasNext()检查序列中是否还有元素。
(3) 使用remove()将迭代器新返回的元素删除。
练习:
去除arraylist的重复元素。
新建一个arraylist容器,把不相同的元素都复制到其中
newArraylist.contains(oldArraylist'e) contains方法调用的是equals方法比较,即比较两个对象的哈希地址值。
总结: 值得注意的是迭代器在循环中被调用次数的情况,下面是在练习过程中遇到的迭代器被调用两次的情况
import java.util.*;
class ArrayListTest
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java01");
al.add("java02");
al.add("java01");
al.add("java03");
ArrayList a = uniqueElement(al);
sop(a);
}
public static ArrayList uniqueElement(ArrayList al)
{
ArrayList al1 = new ArrayList();
//for (Iterator it=al.iterator(); it.hasNext(); )
// {
// if (!al1.contains(it.next())) { // 如果al1 不包含 当前元素, 就把该元素添加进去
// al1.add(it.next()); // 此处调用了两次 it.next 方法,指针走了两个位置!!!
// sop("al1 = "+al1);
// }
// }
for (Iterator it=al.iterator(); it.hasNext(); )
{
Object obj = it.next();
if(!al1.contains(obj))
al1.add(obj);
sop("al1 = "+al1);
}
return al1;
}
public static void sop(Object obj)
{
System.out.println(obj);
}
} |
|