Java源码
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
Iterable
Java源码分析,深入探码Iterator模式
java.util包中包含了一系列重要的集合码。本文分析源码入手~深入究将从研
一集合码的部码~以及遍码集合的迭代模式的源码码码幕。 个内构内
下面我码先码码码码一根接口个Collection~然后分析一抽象码个AbstractList和它的码码Iterator接口~仔码究迭代子模式的码码原理。 并研
本文码码的源代码版本是JDK 1.4.2~因码JDK 1.5在java.util中使用了多泛很型代码~码了码化码码~所以我码码是码码1.4版本的代码。
集合码的根接口Collection
Collection接口是所有集合码的根码型。的一主要的接口方法是, 它个
boolean add(Object c)
add()方法添加一新元素。注意码方法返回一将个个会个boolean~但是返回码不是
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示添加成功否。仔码码码与doc可以看到~Collection码定,如果一集合拒个码添加码元素~无码任何原因~都必码抛出常。码返回码表示的意码是个异个add()方法码行后~集合的容是否改码了;就是元素有无量~位置等码化,~码是由具内数
体即会异个码码码的。,如果方法出码~码抛出常~返回码码码表示码方法码行后码Collection的容有无码化。 内
码似的码有,
boolean addAll(Collection c);
boolean remove(Object o);
boolean removeAll(Collection c);
boolean remainAll(Collection c);
Object[] toArray()方法码码~把集合码码成码返回。很数Object[] toArray(Object[] a)方法就有点码码了~首先~返回的Object[]仍然是把集合的所
有元素码成的码~但是码型和数参数a的码型是相同的~比如码行,
String[] o = (String[])c.toArray(new String[0]);
得到的o码码码型是String[]。
其次~如果参数a的大小不下集合的所有元素~返回的是一新装将个
的码。如果数参数a的大小能下集合的所有元素~码返回的码是装a~但a的容内用集合的元素充。尤其要注意的是~如果来填a的大小比集合元素的码多个数a后面的部分全部被置码null。
最后一最重要的方法是个iterator()~返回一个Iterator;迭代子,~用于遍码集合的所有元素。
用Iterator模式码码遍码集合
Iterator模式是用于遍码集合码的码准码码方法。可以把码码码码不同码型的集合它从
码中抽象出~而避免向客码端暴露集合的部码。 来从内构
例如~如果有使用没Iterator~遍码一码的方法是使用索引, 个数
for(int i=0; i
而码码一码表;个LinkedList,又必码使用while循码,
while((e=e.next())!=null) { ... e.data() ... }
以上码方法客码端都必码事先知道集合的部码~码码代码和集合本身是两内构
码合~无法码码码码集合码和客码端代码中分出码~每一码集合码码一码遍码方法耦将从离来
客码端代码无法码用。
更恐怖的是~如果以后需要把ArrayList更码码LinkedList~码原的客码来端代码必码全部重。 写
码解以上码码~决Iterator模式码是用同一码码码遍码集合, 来
for(Iterator it = c.iterater(); it.hasNext(); ) { ... }
秘在于客码端自身不码码遍码集合的奥"指码"~所有的部码;如前元素内状当位置~是否有下一元素,都由个Iterator码码~而码来个Iterator由集合码通码工方厂法生成~因此~知道如何遍码整集合。 它个
客码端不直接和集合码打交道~码是控制从它Iterator~向码送它"向前"~"向后"~"取前元素当"的命令~就可以码接遍码整集合。 个
首先看看java.util.Iterator接口的定码,
public interface Iterator {
boolean hasNext();
Object next();
void remove();
}
依码前方法就能完成遍码~典型的代码如下, 两个
for(Iterator it = c.iterator(); it.hasNext(); ) {
Object o = it.next();
// 码o的操作...
}
在JDK1.5中~码码上面的代码在码法上作了码化,
// Type是具的码型~如体String。
for(Type t : c) {
// 码t的操作...
}
每一码集合码返回的Iterator具码型可能不同~体Array可能返回ArrayIterator~Set可能返回SetIterator~Tree可能返回TreeIterator~但是码都它码码了Iterator接口~因此~客码端不码心到底是码哪Iterator~只需要码得码它个Iterator接口可~码就是面向码象的威力。 即
Iterator源码剖析
码我码看看来AbstracyList如何码建Iterator。首先AbstractList定码了一个内部码;inner class,,
private class Itr implements Iterator {
...
}
而iterator()方法的定码是,
public Iterator iterator() {
return new Itr();
}