通过哈希集排序的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);
}
}