|
在J中,I是一个接口,位于包中。它定义了个核心方法:N():该方法返回一个布尔值,用于判断集合中是否还有未被迭代的元素。
N()
():该方法返回集合中的下一个元素。如果没有更多的元素可以返回,则会抛出NSEE。
E()
():该方法用于删除迭代器比较近返回的元素。调用此方法是可选的,并且必须在调用()之后进行。注意,一旦调用了(),它将影响底层集合。
()
迭代器的使用
迭代器适用于众多集合类,包括AL,LL,HS,TS,HM等。我们通常使用这些集合的()方法获取一个迭代器例。
以下是一个使用迭代器遍历AL的简单例子:
AL;
I;
IE{
(S[]){
创建一个AL并添加元素
ALS=AL();
("E1");
("E2");
("E3");
获取迭代器
IS=();
使用迭代器遍历集合
(N()){
S=();
S();
}
}
}
迭代器与集合
在J集合框架中,许多集合类都现了I接口,这意味着它们都可以返回一个I例。I接口仅包含一个方法:
IT();
这使得-循环得以现,因为-本质上是使用迭代器进行遍历的。
迭代器-
使用迭代器和使用-循环在很多情况下是等价的,但两者之间存在一些差异:迭代器提供更多控制:迭代器允许在遍历过程中删除元素,而-不允许。可用于并行修改:迭代器更为安全,因为它检测到并发修改时(不是通过迭代器进行的集合内容修改)会抛出CME,从而保护集合的完整性。迭代器删除功能
()方法是迭代器提供的一个功能,用于在迭代过程中移除元素。需要注意的是,()方法必须在()方法之后被调用。
以下是示例代码展示如何在遍历过程中删除元素:
AL;
I;
IRE{
(S[]){
ALI=AL();
(1);
(2);
(3);
(4);
II=();
(N()){
I=();
(%2==0){
();移除偶数
}
}
S();输出:[1,3]
}
}
LI
对于L接口,有一个更加丰富的迭代器接口,称为LI。它继承了I接口,并增加了一些额外的功能:双向遍历:使用LI,你可以向前或向后遍历列表。
P()
E()
获取当前索引:有方法可以获取到当前元素的索引。
I()
I()
添加元素:可以在遍历时添加元素。
(E)
以下是LI的一个简单示例:
AL;
LI;
LIE{
(S[]){
ALS=AL();
("A");
("B");
("C");
LIS=I();
(N()){
S(());
}
反向遍历
(P()){
S(());
}
}
}
总结
迭代器是J集合框架中的重要工具,它使得遍历集合变得简单和统一。通过提供抽象的遍历接口,J使得现上可以隐藏底层的复杂性,从而提高了代码的可维护性和可读性。在现代J编程中,尽管-循环非常流行且简洁,但迭代器依然在需要更精细控制的场景下可替代,特别是在需要并发修改集合时。理解和善用J迭代器是掌握集合框架的重要一步。 |
|