在同一类中实现Java Iterator和Iterable?
|
我试图了解Java
Iterator
和Iterable
接口
我正在写这堂课
class MyClass implements Iterable<String> {
public String[] a = null;
public MyClass(String[] arr) {
a = arr;
}
public MyClassIterator iterator() {
return new MyClassIterator(this);
}
public class MyClassIterator implements Iterator<String> {
private MyClass myclass = null;
private int count = 0;
public MyClassIterator(MyClass m) {
myclass = m;
}
public boolean hasNext() {
return count < myclass.a.length;
}
public String next() {
int t = count;
count++;
return myclass.a[t];
}
public void remove() {
throw new UnsupportedOperationException();
}
}
}
它似乎正在工作。
我应该有:
Myclass implements Iterable<Stirng>, Iterator<String> {
}
或者我应该把MyClassIterator
放在MyClass
之外
class MyClass implements Iterable<String> {
public String[] a = null;
public MyClass(String[] arr) {
a = arr;
}
public MyClassIterator iterator() {
return new MyClassIterator(this);
}
}
public class MyClassIterator implements Iterator<String> {
private MyClass myclass = null;
private int count = 0;
public MyClassIterator(MyClass m) {
myclass = m;
}
public boolean hasNext() {
return count < myclass.a.length;
}
public String next() {
int t = count;
count++;
return myclass.a[t];
}
public void remove() {
throw new UnsupportedOperationException();
}
}
哪一个更好?
没有找到相关结果
已邀请:
4 个回复
锹缄
和
。他们做不同的事情。迭代器自然是有状态的-当您迭代使用它时,它必须更新其世界观。但是,迭代器仅需要能够创建新的迭代器。特别是,您可能有多个迭代器同时处理同一个原始可迭代对象。 您当前的方法几乎可以-我会更改实现的某些方面,但是就职责分离而言还可以。
埃庐
仅需要实现
,这又需要您提供
实现以从
返回。 不需要将ѭ4放在ѭ5之外,因为在大多数情况下,您甚至都不需要直接使用
(by10的ѭ16语法隐式使用了ѭ11),并且在所有其他情况下,接口都是除非您实际上向实现中添加了其他行为(您可能永远不需要这样做),否则它们就足够了。 这是我的处理方式,请参阅内嵌的注释:
粳饶瓢部
而不是引用
参考
您的内部类不是静态的,因此ѭ23将引用创建它的封闭类的实例。
可扇胆
参考https://algs4.cs.princeton.edu/41graph/AdjMatrixGraph.java.html。