Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用迭代器对ArrayList的不同值进行排序_Java_Arraylist_Iterator - Fatal编程技术网

Java 使用迭代器对ArrayList的不同值进行排序

Java 使用迭代器对ArrayList的不同值进行排序,java,arraylist,iterator,Java,Arraylist,Iterator,我一直在试图理解迭代器是如何工作的,在我的测试中,我多次得到了java.util.ConcurrentModificationException。我发现当迭代器在数组列表中运行时,它的值突然发生了变化。我认为,当在事件处理程序中调用运行迭代器的方法时,也会发生这种情况。在我的代码中,这两种情况都会发生 我知道在事件处理程序中调用方法时,我应该在后台线程中运行代码,但我宁愿不这样做,因为在我参加的课程中我们没有讨论过这一点(如果必要的话,我会这样做) 目前我有: import java.util.

我一直在试图理解迭代器是如何工作的,在我的测试中,我多次得到了java.util.ConcurrentModificationException。我发现当迭代器在数组列表中运行时,它的值突然发生了变化。我认为,当在事件处理程序中调用运行迭代器的方法时,也会发生这种情况。在我的代码中,这两种情况都会发生

我知道在事件处理程序中调用方法时,我应该在后台线程中运行代码,但我宁愿不这样做,因为在我参加的课程中我们没有讨论过这一点(如果必要的话,我会这样做)

目前我有:

import java.util.ArrayList;
import java.util.Iterator;

public class Node {

private ArrayList<String> value = new ArrayList<String>();
private ArrayList<String> different_value = new ArrayList<String>();

private int differentK = 0;

public Node (Tabela table, int column){
    for (int i = 1; i<table.get_numLines(); i++){
        this.value.add(table.out[column][i]);
    }

    Iterator<String> itr = this.value.iterator();
    Iterator<String> finder = this.different_value.iterator();

    if(this.value.size()!=0) this.different_value.add(this.value.get(0));

    while(itr.hasNext()){
        while(finder.hasNext()){
            if(!itr.next().equals(finder.next())){
                this.differentK++;
                this.different_value.add(itr.next());
            }
        }
    }

    System.out.println("This node has "+this.differentK+" different K");
}
}
import java.util.ArrayList;
导入java.util.Iterator;
公共类节点{
私有ArrayList值=新ArrayList();
private ArrayList different_value=new ArrayList();
私有整数差=0;
公共节点(Tabela表,int列){

对于(inti=1;i我认为如果列表2中不存在元素,您应该将元素从列表1(值)添加到列表2(不同的值)

第一注释查找器迭代器

//Iterator<String> finder = this.different_value.iterator();
//Iterator finder=this.different_value.Iterator();
然后使用其他循环代替迭代器,例如for循环

while (itr.hasNext()) {
    String current = itr.next();
    boolean exists = false;
    for (int i = 0; i < different_value.size(); i++) {
    if (current.equals(different_value.get(i))) {
        exists = true;
        break;
    }
    }
    if (!exists) {
    different_value.add(current);
    }
}
while(itr.hasNext()){
字符串电流=itr.next();
布尔存在=假;
对于(int i=0;i

这应该可以解决您的问题。不允许在迭代时在列表中添加元素。

不仅“不推荐”,而且是不允许的(只要您使用的是迭代器)。而且for-each循环也会失败,因为它们在幕后使用迭代器。长话短说,使用
列表迭代器
,并通过迭代器进行修改,而不是通过更改数组本身。这对您自己来说太难了。只需使用迭代器对原始列表进行迭代,然后为每个insta添加您可能会遇到这样的情况:if(!list2.contains(iterationElement)){list2.add(iterationElement);}感谢大家快速而出色的回答。我选择了为this.value中的每个字符串元素使用a,检查this.different_value.是否包含该元素,如果不包含,则将其添加到列表中。我不知道ArrayList的contains方法,这非常有帮助。非常感谢@Stultuske。最终像user3580294所说的那样隐式使用了迭代器仅适用于每种类型。