嗨,伙计们,我把这个作为面试问题来回答,但我遇到了麻烦。我熟悉泛型/集合
问题是:所提供的工作区中包含cocI,它是一个类的开始,该类实现了一个迭代器,可用于迭代集合集合。集合集合被传递到类的构造函数中。迭代器应该首先遍历内容深度。
例如,如果集合集合如下所示:
[0] – [“A”, “B”, “C”]
[1] – [“D”]
[2] – [“E”, “F”]
然后迭代器应按以下顺序返回内容:“A”、“B”、“C”、“D”、“E”、“F”
Q.在cocI中提供hasNext()和next()方法的实现
谢谢
import java.util.Collection;
import java.util.Iterator;
public class cocI implements Iterator<Object> {
private Collection<Collection<Object>> _collOfColl = null;
public cocI(Collection<Collection<Object>> collofColl) {
_collOfColl = collofColl;
}
public boolean hasNext() {
// TODO implement this method
return false;
}
public Object next() {
// TODO implement this method
return null;
}
public void remove() {
throw new UnsupportedOperationException();
}
}
几句开场白:
cocI
是一个奇怪的类名;它应该以大写字母开头
解决方案包括外部集合的迭代器和内部集合的迭代器。当内部迭代器的元素用完时,需要为下一个集合用迭代器替换它。然而,考虑到集合可能是空的,升级需要在循环中完成,我将其放入了advanceCollection()
helper中。
import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class cocI<T> implements Iterator<T> {
private Iterator<Collection<T>> outerIterator;
private Iterator<T> innerIterator;
public cocI(Collection<Collection<T>> collofColl) {
this.outerIterator = collofColl.iterator();
advanceCollection();
}
@Override
public boolean hasNext() {
return this.innerIterator != null && this.innerIterator.hasNext();
}
@Override
public T next() {
if (this.innerIterator == null) {
throw new NoSuchElementException();
}
try {
return this.innerIterator.next();
} finally {
advanceCollection();
}
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
private void advanceCollection() {
while ((this.innerIterator == null || !this.innerIterator.hasNext())
&& this.outerIterator.hasNext()) {
this.innerIterator = this.outerIterator.next().iterator();
}
}
}
我使用了一段稍微有点棘手的代码:
try {
return this.innerIterator.next();
} finally {
advanceCollection();
}
大致相当于:
T result = this.innerIterator.next();
advanceCollection();
return result;
您只需在集合集合中跟踪当前集合的迭代器。hasnext()
方法是一个棘手的部分,它将执行以下两个操作之一:如果当前迭代器有更多元素,则返回true;如果在找到包含元素的集合之前不进行搜索,则返回true。如果我们耗尽所有集合,则返回false。
public class Cocl implements Iterator<Object> {
private Collection<Collection<Object>> _collOfColl = null;
private final Iterator<Collection<Object>> coClIterator;
private Iterator<Object> currentColIterator;
public Cocl(Collection<Collection<Object>> collofColl) {
_collOfColl = collofColl;
coClIterator = collofColl.iterator();
if (coClIterator.hasNext()) {
currentColIterator = coClIterator.next().iterator();
}
}
public boolean hasNext() {
if (currentColIterator == null) {
return false;
}
if (!currentColIterator.hasNext()) {
while (coClIterator.hasNext()) {
currentColIterator = coClIterator.next().iterator();
if (currentColIterator.hasNext()) {
return true;
}
}
return false;
} else {
return true;
}
}
public Object next() {
if (hasNext()) {
return currentColIterator.next();
}
throw new NoSuchElementException();
}
public void remove() {
throw new UnsupportedOperationException();
}
public static void main(String[] args) {
Collection<Object> one = Arrays.asList((Object) "A", (Object) "B", (Object) "C");
Collection<Object> two = Arrays.asList((Object) "D", (Object) "E");
Cocl cocl = new Cocl(Arrays.asList(one, two));
while (cocl.hasNext()) {
Object a = cocl.next();
System.out.println(a);
}
}
}
问题内容: 在Java中为集合的集合设计一个迭代器。迭代器应隐藏嵌套,使您可以迭代属于所有集合的所有元素,就像使用单个集合一样 问题答案: 这是一个可能的实现。请注意,我没有执行remove():
假设我有一个包含集合的对象,所述集合上的每个元素都包含一个集合,每个集合都包含一个集合。 我想在最深的对象上迭代,并对其应用相同的代码。 命令式的方法是微不足道的,但有没有一种方法来完成这一切? 我可以看到如何从最深的循环中生成lambda: 但我能做得更多吗?
我正在使用Flutter和Cloud FiRecovery构建一个Instagram克隆,我正在尝试像这样构建数据库: 收藏(“时间线”) 实际上看起来像这样: 阅读项目标题,例如,很容易。我可以渲染一个Listview.builder并使用: 但是我如何遍历每个项目的评论子集合?我尝试了嵌套的Listview和this,但我无法访问elementAt(index)的子集合: 或者有没有更好的方法
我正在研究一个扑克牌洗牌的问题,并找到了两个解决方案。 目标是将存储在阵列中的所有52张扑克牌作为卡对象进行洗牌。卡类具有与其关联的id和名称。 现在,一种方法是使用for循环迭代,然后在临时卡对象持有者和随机数生成器的帮助下,我们可以交换两个对象。这一直持续到我们到达一半的卡片。 另一种方法是使用随机生成器编号实现可比较的覆盖比较方法,因此每次调用该方法时都会得到随机响应。 你觉得哪条路更好?
Iterator(迭代器)是一个接口,它的作用就是遍历容器的所有元素,也是 Java 集合框架的成员,但它与 Collection 和 Map 系列的集合不一样,Collection 和 Map 系列集合主要用于盛装其他对象,而 Iterator 则主要用于遍历(即迭代访问)Collection 集合中的元素。 Iterator 接口隐藏了各种 Collection 实现类的底层细节,向应用程序提
在这个函数中,我对这一行有问题:for(std::set it=owners.begin();它!=业主。结束();它)。 这是错误: 这行有多个标记--“std::set”