【发布时间】:2011-11-11 21:04:32
【问题描述】:
我正在尝试将列表的子列表附加到另一个列表。它在我调用 addAll() 以将 perm 列表元素附加到 outvec 的 while 循环中向我抛出并发修改异常。我需要减小 perm 对象中 p 列表的大小,然后将它的特定部分附加到 outvec。因此,这会不断重复直到 perm 对象的列表 p 中的元素数
import java.util.Collections;
import java.util.List;
public class Generate {
//function to generate the output vector
ListGenerator gen(ListGenerator perm, double frac, int n) {
ListGenerator outvec = new ListGenerator();
for(int i = 0; i < n; i++)
perm.p.add(i, i+1);
outvec.p = perm.p;
//System.out.println("p in gen function: " + p);
randomPerm(perm);
int x = perm.p.size();
while( x > 1)
{
perm.p = firstFP(frac, perm);
System.out.println("perm.p after firstFP call " + perm.p);
outvec.p.addAll(perm.p);
System.out.println("size of outvec: " + outvec.p.size());
x = perm.p.size();
}
return outvec;
}
//function to generate random permutation of numbers
private void randomPerm(ListGenerator perm) {
Collections.shuffle(perm.p);
//System.out.println("perm in randomPerm function: " + p);
}
//function to return first f*|p| number of elements from p
List<Integer> firstFP(double f, ListGenerator perm) {
int new_size = (int) (f * perm.p.size());
return( perm.p.subList(0, new_size));
}
public static void main(String args[]) {
Generate g = new Generate();
ListGenerator p = new ListGenerator();
ListGenerator outvec = new ListGenerator();
double frac = 0.3;
int N = 70000;
outvec = g.gen(p, frac, N);
System.out.println("outvec: " + outvec.p);
System.out.println("size of outvec: " + outvec.p.size());
}
}
import java.util.ArrayList;
import java.util.List;
public class ListGenerator {
List<Integer> p = new ArrayList<Integer>();
}
问题是它在 outvec.p.addAll(temp); 处向我抛出 ConcurrentModificationException;这个说法。这就是我得到的:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$SubList.checkForComodification(Unknown Source)
at java.util.ArrayList$SubList.size(Unknown Source)
at Generate.gen(Generate.java:17)
at Generate.main(Generate.java:49)
我们将不胜感激任何指导。
【问题讨论】:
-
该代码无法编译。你确定这是你的真实代码吗?
-
如果没有看到
ListGenerator和firstFP()的代码,以及frac和perm的值,任何人都很难(如果不是不可能)提供帮助。 -
代码毫无意义——尽量给我们一些最小的东西并代表问题,而不是半猜半猜。
-
大家好..我确实修改了我的代码..有人可以帮忙吗?
-
人们不要再对这个问题投反对票了。那是2年前。长大了。