对于使用Java迭代器的每个循环
所以我一直在看一些我理解用于foreach循环的java代码,但它似乎过于复杂 我有一个包含属性的Control.java文件 我有一个Controls.java文件,它使用迭代器并将Control作为数据类型对于使用Java迭代器的每个循环,java,foreach,iterator,Java,Foreach,Iterator,所以我一直在看一些我理解用于foreach循环的java代码,但它似乎过于复杂 我有一个包含属性的Control.java文件 我有一个Controls.java文件,它使用迭代器并将Control作为数据类型 public class Controls implements Iterable<Control>{ protected ArrayList<Control> controls; public Controls() {
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();
}
}
据我所知,这只是一个foreach循环,在迭代每个控件时添加或删除(或调用任何其他方法)具有额外的好处。作为一名java新手,我想到了几个问题:
foreach
构造,您的类需要实现Iterable
接口,并在所需的方法中提供足够的功能来“迭代”列表并返回每个项。通常这意味着您需要知道什么时候还有剩余的项目,以及如何在步骤中返回每个项目。接口API将告诉您方法是否是“必需的”(即:必须声明该方法,但它不能提供任何实现)。一种更简单的方法是利用现有的集合类型,这样您就不必创建自己的集合类型
这样做还有其他好处吗
这是一个很好的方法,可以提供一个很好的方法,允许用户在您的列表上进行迭代,并使该类与在Iterable
有没有一种不用ArrayList和迭代器就可以做到这一点的方法
您可以将类包装在已经实现迭代器的现有集合中,但这取决于您
有没有更简单的方法来实现这一点?通常是这样做的吗
为了使用Javaforeach
构造,您的类需要实现Iterable
接口,并在所需的方法中提供足够的功能来“迭代”列表并返回每个项。通常这意味着您需要知道什么时候还有剩余的项目,以及如何在步骤中返回每个项目。接口API将告诉您方法是否是“必需的”(即:必须声明该方法,但它不能提供任何实现)。一种更简单的方法是利用现有的集合类型,这样您就不必创建自己的集合类型
这样做还有其他好处吗
这是一个很好的方法,可以提供一个很好的方法,允许用户在您的列表上进行迭代,并使该类与在Iterable
有没有一种不用ArrayList和迭代器就可以做到这一点的方法
您可以将类包装在已经实现迭代器的现有集合中,但这取决于您。因此,for-each循环有两个“参数”。
1.将数组中每一项的值逐个赋值的变量。
2.数组或数组列表等 例如:
public class Test {
public static void main(String[] args) {
int[] numbers = new int[] {3,8,5,2};
for (int i : numbers)
System.out.println(i);
}
}
印刷品:
3
8
5
2
3.
8.
5.
2.
你看,没那么难
并且,您可以使用ArrayList类来动态添加/删除项,而不是使用普通数组:
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(3);
numbers.add(8);
numbers.add(5);
numbers.add(2);
for (int i : numbers)
System.out.println(i);
}
}
import java.util.ArrayList;
公开课考试{
公共静态void main(字符串[]args){
ArrayList编号=新的ArrayList();
增加(3);
增加(8);
增加(5);
增加(2);
用于(int i:数字)
系统输出打印LN(i);
}
}
打印相同的
这回答了您的问题吗?因此,for-each循环有两个“参数”。
1.将数组中每一项的值逐个赋值的变量。
2.数组或数组列表等 例如:
public class Test {
public static void main(String[] args) {
int[] numbers = new int[] {3,8,5,2};
for (int i : numbers)
System.out.println(i);
}
}
印刷品:
3
8
5
2
3.
8.
5.
2.
你看,没那么难
并且,您可以使用ArrayList类来动态添加/删除项,而不是使用普通数组:
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(3);
numbers.add(8);
numbers.add(5);
numbers.add(2);
for (int i : numbers)
System.out.println(i);
}
}
import java.util.ArrayList;
公开课考试{
公共静态void main(字符串[]args){
ArrayList编号=新的ArrayList();
增加(3);
增加(8);
增加(5);
增加(2);
用于(int i:数字)
系统输出打印LN(i);
}
}
打印相同的
这回答了你的问题吗?谢谢!我现在懂多了谢谢!我现在明白多了,我不确定你认为什么“过于复杂”
ArrayList
s具有迭代器,因此您可以在迭代器上对(SomeType x:list)说。这个控件
类只是通过传递ArrayList
迭代器来实现iterator()
,因此for(Control-Control:Controls)
相当于通过它的私有ArrayList
字段。那部分一点也不复杂。add
和remove
方法与此无关。我不确定您认为什么“过于复杂”ArrayList
s具有迭代器,因此您可以在迭代器上对(SomeType x:list)
说。这个控件
类只是通过传递ArrayList
迭代器来实现iterator()
,因此for(Control-Control:Controls)
相当于通过它的私有ArrayList
字段。那部分一点也不复杂。add
和remove
方法与此无关;代替int[]数字=新的int[]{3,8,5,2};因为我的印象是你不能用普通数组做foreach循环。int[]数字实际上是一个普通数组,所以你可以。但请注意,不能将基本数据类型(如int、byte等)与ArrayList一起使用。您必须使用例如'ArrayList=new Array