Java 迭代器和iterable之间的区别是什么?如何使用它们?

Java 迭代器和iterable之间的区别是什么?如何使用它们?,java,iterator,iterable,Java,Iterator,Iterable,我是Java新手,对迭代器和iterable很困惑。有人能给我解释一下并给出一些例子吗?如果集合是可迭代的,那么它可以使用迭代器进行迭代(因此可以在for-each循环中使用)迭代器是将在集合中进行迭代的实际对象。Iterable是一系列可以迭代的元素的简单表示。它没有任何迭代状态,例如“当前元素”。相反,它有一个方法生成一个迭代器 迭代器是具有迭代状态的对象。它允许您使用hasNext()检查它是否有更多元素,并使用next()移动到下一个元素(如果有) 通常,Iterable应该能够生成任意

我是Java新手,对迭代器和iterable很困惑。有人能给我解释一下并给出一些例子吗?

如果集合是可迭代的,那么它可以使用迭代器进行迭代(因此可以在for-each循环中使用)迭代器是将在集合中进行迭代的实际对象。

Iterable是一系列可以迭代的元素的简单表示。它没有任何迭代状态,例如“当前元素”。相反,它有一个方法生成一个
迭代器

迭代器是具有迭代状态的对象。它允许您使用
hasNext()
检查它是否有更多元素,并使用
next()
移动到下一个元素(如果有)


通常,
Iterable
应该能够生成任意数量的有效的
迭代器。

Iterable
的实现是一个提供自身的
迭代器的实现:

public interface Iterable<T>
{
    Iterator<T> iterator();
}
公共接口不可编辑
{
迭代器迭代器();
}
迭代器是一种简单的方法,它允许一些人在没有分配权限的情况下(尽管能够删除)遍历数据集合

公共接口迭代器
{
布尔hasNext();
E next();
无效删除();
}

请参阅。

实现Iterable接口允许对象成为“foreach”语句的目标

class SomeClass implements Iterable<String> {}

class Main 
{
  public void method()
  {
     SomeClass someClass = new SomeClass();
     .....

    for(String s : someClass) {
     //do something
    }
  }
}
class SomeClass实现了Iterable{}
班长
{
公开作废法()
{
SomeClass SomeClass=新的SomeClass();
.....
for(字符串s:someClass){
//做点什么
}
}
}

迭代器是一个接口,它具有对元素进行迭代的实现。Iterable是一个提供迭代器的接口。

最重要的考虑因素是相关项是否能够被多次遍历。这是因为您始终可以通过再次调用iterator()来回放Iterable,但无法回放迭代器。

问题:Iterable和iterator之间的区别
答复:

iterable:它与forEach循环相关
迭代器:与集合相关

forEach循环的目标元素应该是iterable
我们可以使用迭代器从集合中逐个获取对象

Iterable存在于java中。ḷang软件包
java.util包中存在迭代器

仅包含一个方法迭代器()
包含三个方法hasNext()、next()、remove()

在1.5版本中引入
在1.2版中引入,除了和答案。

简单来说,IterableIterator都是Java集合框架中提供的接口

Iterable

如果一个类想要有一个for-each循环来迭代它的集合,那么它必须实现Iterable接口。但是,for each循环只能用于正向循环遍历集合,您将无法修改此集合中的元素。但是,如果您只想读取元素数据,那么它非常简单,而且由于Java lambda表达式,它通常是一行。例如:

iterableElements.forEach (x -> System.out.println(x) );
for (Iterator i = c.iterator(); i.hasNext(); ) {
       Element e = i.next();    //Get the element
       System.out.println(e);    //access or modify the element
}
迭代器

此接口使您能够遍历集合,获取并删除其元素。每个集合类都提供了一个迭代器()方法,该方法将迭代器返回到集合的开头。与iterable相比,此接口的优点是,使用此接口可以添加、修改或删除集合中的元素。但是,访问元素需要比iterable多一点的代码。例如:

iterableElements.forEach (x -> System.out.println(x) );
for (Iterator i = c.iterator(); i.hasNext(); ) {
       Element e = i.next();    //Get the element
       System.out.println(e);    //access or modify the element
}

来源:


  • 从根本上说,两者之间的关系非常密切

    将迭代器看作是一个接口,它可以帮助我们借助一些未定义的方法(如hasNext()、next()和remove()遍历集合

    另一方面,Iterable是另一个接口,如果由类实现,则该接口将强制该类为Iterable,并且是每个构造的目标。 它只有一个名为iterator()的方法,该方法来自iterator接口本身

    如果集合是可迭代的,则可以使用迭代器对其进行迭代

    要了解这些信息,请访问:

    ITERABLE:


    迭代器

    考虑一个有10个苹果的示例。 当它实现Iterable时,就像将每个苹果放在1到10之间的框中,然后返回一个迭代器,该迭代器可用于导航

    通过实现迭代器,我们可以得到任何苹果、下一个盒子中的苹果等

    因此,实现iterable使迭代器能够导航其元素,尽管要导航,需要实现迭代器。

    如前所述,引入“iterable”是为了能够在
    foreach
    循环中使用。可以迭代实现Iterable接口的类


    迭代器是在一个Iterable上管理迭代的类。它保持我们在当前迭代中的状态,并知道下一个元素是什么以及如何获得它。

    我将以ArrayList为例回答这个问题,以帮助您更好地理解

  • Iterable接口强制其子类实现抽象方法“iterator()”
  • ArrayList实现列表、列表扩展集合和集合扩展Iterable。。 也就是说,你可以看到这样的关系
    “Iterable
    Iterable
    被引入java中的for-each循环中

    public interface Collection<E> extends Iterable<E>  
    
    公共接口集合扩展了Iterable
    
    Iterator
    是在
    Iterable
    上管理迭代的类。它保持我们在当前迭代中的状态,并知道
    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);
        }
    }
    
    public interface Collection<E> extends Iterable<E>