java iterator接口实现_Java基础 -- Collection和Iterator接口的实现

Collection是描述所有序列容器(集合)共性的根接口,它可能被认为是一个“附属接口”,即因为要表示其他若干个接口的共性而出现的接口。另外,java.util.AbstractCollection抽象类实现了Collection的默认实现,使得我们可以创建AbstractCollection的子类型。

使用接口描述的一个理由是它可以使我们能够创建更通用的代码。通过针对接口而非具体实现来编写代码,我们的代码可以应用于更多的对象类型。如果编写的方法将接受一个Collection,那么该方法就可以应用于任何实现了Collection的类。

import java.util.*;

public class InterfaceVsIterator {

public static void display(Iterator it) {

while(it.hasNext()) {

int num = it.next();

System.out.print(num + " ");

}

System.out.println();

}

public static void display(Collection nums) {

for(int num : nums){

System.out.print(num + " ");

}

System.out.println();

}

public static void main(String[] args) {

List list = new ArrayList();

Collections.addAll(list, 1,2,3,4,5,6,7);

display(list);

display(list.iterator());

}

}

输出:

1 2 3 4 5 6 7

1 2 3 4 5 6 7

从上面例子可以看到,Collection接口和Iterator都可以将display()方法与容器底层实现解耦。

在foreach结构中可以遍历Collection,主要是因为Collection接口实现了Iterable接口,这在Java基础 -- 深入理解迭代器中介绍过。

一 实现Collection接口

如果我们想创建一个Collection接口的实现应该怎么办,那么我们必须实现所有Collection方法。但是我们可以通过继承AbstractCollection,就可以简单实现它,这样,我们只需要提供iterator()和size()方法即可:

import java.util.*;

public class CollectionSequence extends AbstractCollection{

private List ints = new ArrayList();

@Override

public Iterator iterator() {

// TODO Auto-generated method stub

return new Iterator() {

public int index = 0;

@Override

public boolean hasNext() {

// TODO Auto-generated method stub

return index < ints.size();

}

@Override

public T next() {

// TODO Auto-generated method stub

return ints.get(index++);

}

public void remove() {

throw new UnsupportedOperationException();

}

};

}

@Override

public boolean add(T e) {

// TODO Auto-generated method stub

return ints.add(e);

}

@Override

public int size() {

// TODO Auto-generated method stub

return ints.size();

}

public static void main(String[] args) {

CollectionSequence c = new CollectionSequence();

Collections.addAll(c, 3,4,3,4,5,6,7);

InterfaceVsIterator.display(c);

c.add(2000);

InterfaceVsIterator.display(c.iterator());

}

}

输出:

3 4 3 4 5 6 7

3 4 3 4 5 6 7 2000

从上面例子可以看到,实现Collection,只需要实现iterator()、size()方法,这是由于继承了AbstractCollection类,所以花费的代价很小。但是,如果你的类已经继承了其他的类,那么就不能再继承AbstractCollection类了。在这种情况下,要实现Collection,就必须实现该接口的所有方法,

参考文献:

[1]java编程思想

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值