3

well I know it is very novice question, but nothing is getting into my mind. Currently I am trying this, but it is the least efficient way for such a big number. Help me anyone.

int count = 66000000;
LinkedList<Integer> list = new LinkedList<Integer>();
        for (int i=1;i<=count;i++){
            list.add(i);
            //System.out.println(i);
        }

EDIT:

Actually I have o perform operation on whole list(queue) repeatedly (say on a condition remove some elements and add again), so having to iterate whole list became so slow what with such number it took more than 10min.

4

3 回答 3

8

你的输出的大小是O(n)因此实际上不可能有一个算法比O(n)时间复杂度更有效地填充你的列表。

将数字打印到屏幕上所花费的时间比实际生成列表所花费的时间要多得多。如果您真的想加快此代码的速度,请删除

System.out.println(i);

在单独的说明中,我注意到您正在使用 a LinkedList,如果您使用数组(或基于数组的列表),它应该会更快。

于 2013-06-10T19:16:40.457 回答
3

您可以实现一个Listwhereget(int index)方法只返回索引(或基于索引的某个值)。然后列表的创建将是常数时间(O(1))。该列表必须是不可变的。

于 2013-06-10T19:51:00.997 回答
0

您的问题不仅仅是建立列表,还包括删除和重新插入。我怀疑您应该使用 HashSet,甚至可能是 BitSet 而不是任何类型的 List。

于 2013-06-10T23:11:13.063 回答