当我使用" Eratosthenes的筛子"生成素数我遇到了这个问题。我想创建一个方法,它接收一个列表,然后删除3之后的每个第3个列表:[2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29...] -> [2, 3, 5, 7, 11, 13, 17, 19, 23, 25, 29...]
。这是我的代码:
private static void removeThird(List<Long> l) {
int i = 1;
int count = 0;
while (i < l.size()) {
// System.out.print(count + ":"); //debug
// System.out.print(l.get(i) + " ");
if (count == 3) {
l.remove(i);
count = 1;
}
i ++;
count ++;
}
}
此代码有效,但因为我想生成大量的素数,所以我需要一个很长的列表。因此,如果我希望能够访问和修改列表中的每个项目,我将需要一个long类型来存储我的索引。所以我将int i = 0
更改为long i = 0
,代码不起作用。我查看了关于列表类的文档,并意识到我只能调用list.remove(int index)
。我想知道如果我想打list.remove(long index)
怎么办?有办法吗?谢谢!
答案 0 :(得分:2)
List
及其实现仅适用于大小适合int
的正半部分的列表。例如,&#34;仅#34;最多4,294,967,296个条目(索引0 - 4294967295,包括在内)。
如果您需要一个比这更长的列表,您需要找到一个非JDK列表类型或实现您自己的列表。