本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、虛擬主機(jī)、營(yíng)銷軟件、網(wǎng)站建設(shè)、甘谷網(wǎng)站維護(hù)、網(wǎng)站推廣。迭代器模式又叫游標(biāo)模式,是對(duì)象的行為模式。迭代器模式可以順序地訪問(wèn)一個(gè)聚集中的元素而不必暴露聚集的內(nèi)部表象。
此抽象角色定義出遍歷元素所需的接口。
此角色實(shí)現(xiàn)了Iterator接口,并保持迭代過(guò)程中的游標(biāo)位置。
此抽象角色給出創(chuàng)建迭代器(Iterator)對(duì)象的接口。
聚合持有對(duì)象集合,提供返回迭代器的方法,可以正確遍歷該集合。
持有對(duì)聚集及其迭代器對(duì)象的引用,調(diào)用迭代器對(duì)象的迭代接口。
public class C02_Iterator {
public static void main(String[] args) {
Object[] objArray = {"one","two","three","four","five"};
Aggregate aggregate = new ConcreteAggregate(objArray);
Iterator iterator = aggregate.createIterator();
while (!iterator.isEnd()){
System.out.println(iterator.currentItem());
iterator.next();
}
}
}
interface Iterator {
void first();
void next();
boolean isEnd();
Object currentItem();
}
class ConcreteIterator implements Iterator{
//持有被迭代的聚合對(duì)象
private ConcreteAggregate agg;
//記錄當(dāng)前迭代索引位置
private int index = 0;
//設(shè)置當(dāng)前聚集對(duì)象的大小
private int size = 0;
public ConcreteIterator (ConcreteAggregate agg){
this.agg = agg;
this.size = agg.getSize();
index = 0;
}
@Override
public void first() {
index = 0;
}
@Override
public void next() {
if (index=size);
}
@Override
public Object currentItem() {
return agg.getElement(index);
}
}
abstract class Aggregate {
// 創(chuàng)建相應(yīng)迭代器對(duì)象的接口
public abstract Iterator createIterator();
}
class ConcreteAggregate extends Aggregate{
private Object[] objArray = null;
public ConcreteAggregate (Object[] objArray){
this.objArray = objArray;
}
@Override
public Iterator createIterator() {
return new ConcreteIterator(this);
}
public Object getElement (int index){
if (index
public class C02_ArrayList {
public static void main(String[] args) {
List stringList = new ArrayList<>() ;
stringList.add("One") ;
stringList.add("Two") ;
stringList.add("Three") ;
java.util.Iterator itr = stringList.iterator() ;
while (itr.hasNext()){
System.out.println(itr.next());
}
}
}
規(guī)定了集合迭代的一些方法。
public interface Iterator {
boolean hasNext();
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
default void forEachRemaining(Consumer super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}
實(shí)現(xiàn)聚合接口List
ArrayList extends AbstractList implements List
內(nèi)部迭代器接口實(shí)現(xiàn)
private class Itr implements Iterator {
int cursor;
int lastRet = -1;
int expectedModCount = modCount;
Itr() {}
public boolean hasNext() {}
public E next() {}
public void remove() {}
public void forEachRemaining(Consumer super E> consumer) {}
final void checkForComodification() {}
}
public Iterator iterator() {
return new Itr();
}
1、適用場(chǎng)景
迭代器模式是與集合綁定,只要使用集合,就需要同時(shí)這個(gè)集合的迭代器,以此遍歷集合中的數(shù)據(jù),java中的容器對(duì)象Collection,List、Set、Map都有自己的迭代器。容器對(duì)象在編程語(yǔ)言中十分核心,所以在實(shí)現(xiàn)容器的時(shí)候基本都有匹配的迭代器,可以滿足開發(fā)的需要,所以迭代器的自定義實(shí)踐場(chǎng)景比較少。
2、優(yōu)點(diǎn)總結(jié)
簡(jiǎn)化集合遍歷方式,每一個(gè)聚集對(duì)象都可以有一個(gè)或多個(gè)迭代器對(duì)象,每一個(gè)迭代器的迭代狀態(tài)可以是彼此獨(dú)立的。遍歷算法被封裝在迭代器角色里面,因此迭代的算法可以獨(dú)立于聚集角色變化。
GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。