在java中我们可以使用list.remove(int index)来删除该索引中的项目,如果列表很大并且我们只能使用long来存储索引该怎么办?

时间:2016-09-22 11:05:05

标签: java algorithm list

当我使用" 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)怎么办?有办法吗?谢谢!

1 个答案:

答案 0 :(得分:2)

List及其实现仅适用于大小适合int的正半部分的列表。例如,&#34;仅#34;最多4,294,967,296个条目(索引0 - 4294967295,包括在内)。

如果您需要一个比这更长的列表,您需要找到一个非JDK列表类型或实现您自己的列表。