最近在看Java的集合类的源码,发现他的toArray的实现是这样的public Object[] toArray() {
// Estimate size of array; be prepared to see more or fewer elements
Object[] r = new Object[size()];
Iterator<E> it = iterator();
for (int i = 0; i < r.length; i++) {
if (! it.hasNext()) // fewer elements than expected
return Arrays.copyOf(r, i);
r[i] = it.next();
}
return it.hasNext() ? finishToArray(r, it) : r;
}就是创建一个与Collection一样大的数组,利用迭代器往数组当中填值,我感到疑惑的是那两个判断,到底什么时候会发生循环内it.hasNext()为false或循环外it.hasNext()为true的情况呢?为什么迭代器会和数组本身的元素不一样多呢?
请举个栗子告诉我,有代码演示就更好了,谢谢大家了
// Estimate size of array; be prepared to see more or fewer elements
Object[] r = new Object[size()];
Iterator<E> it = iterator();
for (int i = 0; i < r.length; i++) {
if (! it.hasNext()) // fewer elements than expected
return Arrays.copyOf(r, i);
r[i] = it.next();
}
return it.hasNext() ? finishToArray(r, it) : r;
}就是创建一个与Collection一样大的数组,利用迭代器往数组当中填值,我感到疑惑的是那两个判断,到底什么时候会发生循环内it.hasNext()为false或循环外it.hasNext()为true的情况呢?为什么迭代器会和数组本身的元素不一样多呢?
请举个栗子告诉我,有代码演示就更好了,谢谢大家了
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货