java - 对于使用 Java Iterator 的每个循环

标签 java foreach iterator

<分区>

所以我一直在查看一些我理解用于 foreach 循环的 java 代码,但它似乎过于复杂。

我有一个包含属性的 Control.java 文件。

我有一个 Controls.java 文件,它使用 Iterator 并将 Control 作为数据类型。

public class Controls implements Iterable<Control>{
    protected ArrayList<Control> controls;

    public Controls()
    {
        controls = new ArrayList<Control>();
    }
    public Controls(ArrayList<Control> controls)
    {
        this.controls = controls;
    }

    public ArrayList<Control> value()
    {
        return controls;
    }

    public void add(Control ctrl)
    {
        this.controls.add(ctrl);
    }

    public void add(Controls ctrls)
    {
        for(Control ctrl : ctrls)
        {
            this.controls.add(ctrl);
        }
    }

    public void remove(Control ctrl)
    {
        if(this.controls.contains(ctrl))
        {
            this.controls.remove(ctrl); 
        } else
        {
            for (Control c: this.controls)
            {
                if(c instanceof ContainerControl)
                {
                    ((ContainerControl)c).controls.remove(ctrl);
                }
            }
        }

    }


    public Control get(String name)
    {
        //stuff here
    }

    @Override
    public Iterator<Control> iterator() {
        return controls.iterator();
    }
}

其他文件这样使用它:

public void dumpInstantiation(StringBuffer buf)
{
    for(Control control : controls)
    {
        control.dumpInstantiation(buf);
    }
}

据我了解,这只是一个 foreach 循环,在迭代每个控件时具有添加或删除(或调用任何其他方法)的额外好处。作为一个 Java 新手,有几个问题浮现在脑海中:

  1. 有没有更简单的方法来实现它?这是通常的做法吗?
  2. 这样做还有其他好处吗?
  3. 没有 ArrayList 和 Iterator 有没有办法做到这一点?

最佳答案

Is there an easier way to implement this? Is this how it is usually done?

为了使用 Java foreach 构造,您的类需要实现 Iterable 接口(interface),并在所需方法中提供足够的功能以“迭代”列表并退还每件元素。通常这意味着您需要知道什么时候还有剩余的元素,以及一种逐步归还每个元素的方法。接口(interface) API 会告诉您某个方法是否“必需”(即:必须声明该方法,但它不能提供任何实现)。一种更简单的方法是利用现有的集合类型,这样您就不必创建自己的集合类型。

Is there any other benefits of doing it this way?

这是一个很好的方法,可以提供一个很好的方法来允许用户遍历您的列表,并且它使该类与在 Iterable 上操作的其他接口(interface)兼容

Is there a way to do this without ArrayList and Iterator?

您可以将您的类包装在一个已经实现了迭代器的现有集合中,但这将取决于您。

关于java - 对于使用 Java Iterator 的每个循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27990158/

相关文章:

java - 如何在 Java 中将整数字符串转换为 ArrayList?

java - Android 以编程方式在按钮单击上打开“选择输入方法”选项卡

java - 使用 Spring Rabbitmq Stomp 的持久队列

javascript - 检查主数组中的所有元素在由标识符 javascript 标识的子数组中是否至少出现一次

javascript - 数组拒绝返回值

c++ - std::map 中的最后一个键

java - 从Java中的String中删除所有非-"word characters",留下重音字符?

c++ - std::for_each 在具有两个参数的成员函数上的用法

filter - 为什么在迭代器上使用过滤器时会得到不同的参数类型?

Java:空指针双端队列迭代器