Java iterator 迭代器如何加入元素...可以加入不同类型的元素么?

Java iterator 迭代器如何加入元素...可以加入不同类型的元素么?,第1张

java中iterator方法的调用是,对象.iterator(),你说的collection<>coll,首先要看泛型中定义成什么了,如果collection<>coll是collection<Integer>coll,那你的String类型的数据一定加不进去collection<Integer>coll = new ArrayList(),所以就无法用同一个对象的迭代器了。解决方法可以:

Collection<Integer>coll = new ArrayList<Integer>()

coll.add(1111)

Iterator<Integer>collIt = coll.iterator()

while(collIt.hasNext()){

System.out.println(collIt.next())

}

List<String>list = new ArrayList<String>()

list.add("123")

Iterator<String>listIt = list.iterator()

while(listIt.hasNext()){

System.out.println(listIt.next())

}

/*

-------------------华丽的分割线第二种方法

*/

//这是个不负责的设计,正确的设计应该严格控制调用的参数,切记

Collection coll2 = new ArrayList()

coll2.add("123")

coll2.add(123)

Iterator list2It = coll2.iterator()

while(list2It.hasNext()){

System.out.println(list2It.next())

}

定义结构

然而在前一种情况,容器承受了过多的功能,它不仅要负责自己“容器”内的元素维护(添加、删除等等),而且还要提供遍历自身的接口;而且由于遍历状态保存的问题,不能对同一个容器对象同时进行多个遍历。第二种方式倒是省事,却又将容器的内部细节暴露无遗。

而迭代器模式的出现,很好的解决了上面两种情况的弊端。先来看下迭代器模式的真面目吧。

迭代器模式由以下角色组成:

1) 迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。

2) 具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。

3) 容器角色(Container):容器角色负责提供创建具体迭代器角色的接口。

4) 具体容器角色(Concrete Container):具体容器角色实现创建具体迭代器角色的接口——这个具体迭代器角色与该容器的结构相关。

迭代器模式的类图如下:

从结构上可以看出,迭代器模式在客户与容器之间加入了迭代器角色。迭代器角色的加入,就可以很好的避免容器内部细节的暴露,而且也使得设计符合“单一职责原则”。

注意,在迭代器模式中,具体迭代器角色和具体容器角色是耦合在一起的——遍历算法是与容器的内部细节紧密相关的。为

了使客户程序从与具体迭代器角色耦合的困境中脱离出来,避免具体迭代器角色的更换给客户程序带来的修改,迭代器模式抽象了具体迭代器角色,使得客户程序更

具一般性和重用性。这被称为多态迭代。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11488855.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存