通过哈希集排序的java迭代器错误

通过哈希集排序的java迭代器错误,java,iteration,hashset,Java,Iteration,Hashset,我需要使用哈希集返回同时包含负值和正值的值,同时保持顺序。这就是我所拥有的,但我不断地犯错误。任何帮助都会很棒 public static double[] negated(double[] a) { Set<Double> x = new HashSet<Double>(); for (int i = 0; i < a.length; i++) { x.add((Double)a[i]); } for(d

我需要使用哈希集返回同时包含负值和正值的值,同时保持顺序。这就是我所拥有的,但我不断地犯错误。任何帮助都会很棒

public static double[] negated(double[] a)
{
    Set<Double> x = new HashSet<Double>();
    for (int i = 0; i < a.length; i++)
    {
        x.add((Double)a[i]);
    }


    for(double e : x)
    {
       if (x.contains(-e) == false)
       {
          x.remove(e);
       }
    }

    List<Double> list = new ArrayList<Double>(x);
    double[] b = new double[list.size()];
    for (int i = 0; i < a.length; i++)
    {
        if (list.contains(a[i]))
        {
          b[i] = list.get(i);
        }
    }

    return b;
}


public static void main(String[] args)
{
    double[] c = {3, 4, 5, 6, -7, -5, -3, 9};
    System.out.println(negated(c));
        }

在对列表进行迭代时,无法修改该列表。这是非法的:

for(double e : x) {
    if (x.contains(-e) == false) {
        x.remove(e);
    }
}
更好的方法是用你想要保留的东西制作一个新的
集合

Set<Double> list = new HashSet<Double>();
for (double e : x) {
    if (x.contains(-e)) {
        list.add(e);
    }
}
Set list=new HashSet();
用于(双e:x){
如果(x.e)){
列表.添加(e);
}
}

你能告诉我们错误是什么吗?@mohammadshamsi我的错。它已被编辑。您是否导入了
设置
列表
以及您使用的所有其他内容?这看起来像是一个简单的编译错误,Eclipse或Netbeans之类的东西可以立即修复…@tjameson导入了这些包,我在另一个装备上尝试了Netbeans,我再也没有运气了。当您在StackOverflow上发布问题时,您应该在发布之前尝试使代码尽可能简洁:)或者如果您知道要删除的项目数量可能非常少,那么您可以创建一个要删除的项目列表,然后在迭代结束时将其整体删除。
Set<Double> list = new HashSet<Double>();
for (double e : x) {
    if (x.contains(-e)) {
        list.add(e);
    }
}