整数列表的数组

时间:2013-11-05 21:13:03

标签: java arrays

我正在尝试构造一个数组,其中每个“块”b都有一个每个数字x的列表,使得phi(x)= b(euler totient A000010)。例如,arrray [10] = 11,22,数组[4] = 5,8,10,12。我通常会做的是构造一个2d数组,但这会抛出明显的堆栈溢出异常。你能帮我构建一个更有效的结构(明智的堆空间)。

4 个答案:

答案 0 :(得分:2)

你考虑过一份清单吗?

ArrayList<ArrayList<Integer>> listOflists = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(11);
list.add(12);
listOflists.add(10,list);

答案 1 :(得分:1)

  

我通常会做的是构建一个大小的二维数组,但是   这会引发明显的堆栈溢出异常。

嗯,是的。您的行具有可变数量的元素,因此如果您索引数组尚未分配的内容,您将获得异常。考虑使用ListSet来代替:

List<List<Integer>> myOverlyComplexList = ...

然后你可以为每个元素提供可变数字序列。

答案 2 :(得分:1)

在java中,数组的大小是固定的。 如果你想放入的东西超过实际大小,它将产生堆栈溢出(如我们的网站)。 我建议你使用arraylist而不是array。 arraylist具有动态大小。

ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>()

答案 3 :(得分:1)

我认为一组数组或一组数组对你来说比列表更好。所以忘掉ArrayList<ArrayList<Integer>>List<List<Integer>>并使用Set<Integer>[]List<Integer>[]

原因是,一旦您计算phi(x)y,您就需要分配到数组的条目y。但如果它是一个列表,则意味着您突然必须将当前list.size()中的所有条目添加到y。这只是一段混乱且不必要的代码。

请使用数组,而不是列表;但随意在列表中放置列表或集合。

修改

您可以使用类似

的内容对其进行初始化
int arraySize = 100;
List<?>[] list = new List<?>[arraySize];

然后,当您发现phi(number) = phiNumber时,您可能会执行类似

的操作
if (phiNumber < arraySize) {
    if (list[phiNumber] == null) {
        list[phiNumber] = new ArrayList<Integer>();
    }
    list[phiNumber].add(number);
}
else {
   // I don't know.  Print an error message?  Throw an exception?  You choose!
}