gpt4 book ai didi

java - 如何复制迭代器对象?

转载 作者:行者123 更新时间:2023-12-02 13:22:06 29 4
gpt4 key购买 nike

这是一个示例代码,寻找通用的解决方案。

   List<String> names = new ArrayList<String>();
for(int i=0; i<names.size()-1; i++){
for(int j=i+1; j<names.size(); j++){
if(names.get(i) == names.get(j)) {
//return true;
}
}
}

我想用增强的 for 循环替换上面的 for 循环。所以尝试了这样的尝试。将上面的 for 循环替换为迭代器:

    String name;
Iterator<String> itr2;
Iterator<String> itr1 = names.iterator();
while(itr1.hasNext()) {
// for(name=itr1.next(); itr1.hasNext(); ) {
name = itr1.next(); // iterating itr1
itr2 = itr1;
while(itr2.hasNext()){
if(name.equalsIgnoreCase(itr2.next())) { // iterating itr2
return true;
}
}
}

我们正在迭代 itr2,但 itr1 也在变化。这是因为设置了 itr1 = itr2。是否可以复制迭代器对象而不是分配?相反,迭代器也欢迎任何其他逻辑。

谢谢。

最佳答案

如果您想使用增强型,则无法直接访问迭代器,并且在任何情况下都不能/不应该重新分配迭代器。

相反,尝试使用子列表和附加索引计数器:

List<String> names = Arrays.asList( "a", "b", "a", "b", "c" );

int i = 0;
for( String n : names.subList( 0, names.size() - 1) ) {
for( String s : names.subList( i + 1, names.size() ) ) {
if( n.equals( s )) {
return true;
}
}

i++;
}

这并不比您的原始版本好多少,并且仅用于教育目的。可能有更好的方法来实现您的实际目标。

或者,使用 Java 8,您可以利用流:

boolean hasDuplicates = IntStream.range( 0, names.size() - 1 )
.filter( i -> names.subList( i + 1, names.size() ).contains( names.get( i ) ) )
.findAny()
.isPresent();

关于java - 如何复制迭代器对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43521518/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com