Cha*_*Cai 178 java iterator iterable
我是Java新手,我真的很困惑iterator和iterable.任何人都可以向我解释并举一些例子吗?
Col*_*inD 183
An Iterable是可以迭代的一系列元素的简单表示.它没有任何迭代状态,例如"当前元素".相反,它有一个产生一个的方法Iterator.
An Iterator是具有迭代状态的对象.它允许您检查是否有更多元素使用hasNext()并移动到下一个元素(如果有)使用next().
通常,Iterable应该能够产生任意数量的有效Iterators.
Kei*_*son 86
实现Iterable是一个提供Iterator自身的实现:
public interface Iterable<T>
{
Iterator<T> iterator();
}
Run Code Online (Sandbox Code Playgroud)
迭代器是一种简单的方法,允许一些人在没有赋值权限的情况下循环访问数据集合(虽然能够删除).
public interface Iterator<E>
{
boolean hasNext();
E next();
void remove();
}
Run Code Online (Sandbox Code Playgroud)
见Javadoc.
dle*_*lev 12
如果一个集合是可迭代的,那么它可以使用迭代器进行迭代(因此可以在每个循环中使用它.)迭代器是将遍历集合的实际对象.
JAM*_*ANG 11
我将回答这个问题,特别是关于ArrayList的例子,以帮助您更好地理解..
Run Code Online (Sandbox Code Playgroud)public interface Iterable { ... abstract Iterator<T> iterator(); //Returns an 'Iterator'(not iterator) over elements of type T. ... }
Run Code Online (Sandbox Code Playgroud)public interface Iterator { ... abstract boolean hasNext(); //Returns true if the iteration has more elements. abstract E next(); //Returns the next element in the iteration. ... }
'Iterable < - Collection < - List < - ArrayList'
.而Iterable,Collection和List只是声明抽象方法'iterator()',而ArrayList单独实现它.
'iterator()'方法返回一个实现'Iterator'的类'Itr'的对象.
Run Code Online (Sandbox Code Playgroud)public class ArrayList<E> ... implements List<E>, ... { ... public Iterator<E> iterator() { return new Itr(); } private class Itr implements Iterator<E> { ... public boolean hasNext() { return cursor != size; } @SuppressWarnings("unchecked") public E next() { checkForComodification(); int i = cursor; if (i >= size) throw new NoSuchElementException(); Object[] elementData = ArrayList.this.elementData; if (i >= elementData.length) throw new ConcurrentModificationException(); cursor = i + 1; return (E) elementData[lastRet = i]; } ... } }
这是一个简单的例子.
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String string = iterator.next();
System.out.println(string);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,它清楚了吗?:)
小智 10
我知道这是一个古老的问题,但是对于任何读这个的人来说,他们遇到了同样的问题并且可能对所有术语感到不知所措,这里有一个很好的简单类比,可以帮助您理解迭代器和迭代器之间的区别:
想想公共图书馆。老套。用纸书。是的,那种图书馆。
一个装满书的书架就像一个迭代器。你可以看到书架上的一排长长的书。你可能不知道有多少,但你可以看到这是一本很长的书。
图书管理员就像迭代器。他可以随时指向特定的书。他可以在他所指的那个位置插入/移除/修改/阅读这本书。每次你大喊“下一本!”时,他都会依次指向每本书。给他。所以,你通常会问他:“有下一个吗?”,他会说“是”,你说“下一个!” 他会指向下一本书。他也知道他什么时候到了架子的尽头,所以当你问:“有下一个吗?” 他会说“不”。
我知道这有点傻,但我希望这会有所帮助。
实现Iterable接口允许对象成为"foreach"语句的目标.
class SomeClass implements Iterable<String> {}
class Main
{
public void method()
{
SomeClass someClass = new SomeClass();
.....
for(String s : someClass) {
//do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
Iterator是一个接口,它具有迭代元素的实现.Iterable是一个提供Iterator的接口.
最重要的考虑因素是所讨论的项目是否应该能够被多次遍历。这是因为您始终可以通过再次调用iterator()来回退Iterable,但是无法回退Iterator。
| 归档时间: |
|
| 查看次数: |
118232 次 |
| 最近记录: |