-3

我需要创建大小为 1000 的 Arraylist,当用户输入多个值时动态创建。假设用户输入 2200 个值,则需要动态创建 2 个 1000 个 ArrayList,并且必须动态创建一个 200 个 Arraylist。我该怎么办?我只知道我可以使用对象的 Arraylist。请帮忙

4

4 回答 4

2

由于您从未指定必须初始化对象……您可以使用它。

public List<ArrayList<Object>> dynamicSizedLists(final int size) {
    List<ArrayList<Object>> retVal = new LinkedList<ArrayList<Object>>();
    final int MAX_SIZE = 1000;
    int iterations = size / MAX_SIZE;
    for(; iterations > 0; iterations--) {
        retVal.add(new ArrayList<Object>(MAX_SIZE));
    }
    retVal.add(new ArrayList<Object>(size % MAX_SIZE));

    return retVal;
}

您可以在调试器中观察到这些已通过elementData私有字段正确分区。

于 2013-03-12T06:30:47.420 回答
1

您可以使用 ArrayList 的size()方法检查大小是否达到 1000,然后在另一个数组列表中添加条目。

于 2013-03-12T06:21:41.533 回答
0

您可以使用Guavas Lists.partition操作将所有数据列表拆分为所需大小的块 + 其余所有数据中的一个块。一直为我工作。如果您不确定,请在此处查看 javadoc

于 2013-03-12T06:26:48.787 回答
-1

试试这个(注意我没有使用泛型,因为你不能有泛型数组):

ArrayList entered = new ArrayList();
Scanner in = new Scanner(System.in);
while(true)
{
    try
    {
        System.out.print("Enter a number (enter a non-number to stop)\n>");
        entered.add(in.nextInt());
    }
    catch(InputMismatchException e)
    {
        break;
    }
}
List[] lists = new List[entered.size() / 1000 + 1];
int currentElement = 0;
for(int i = 0; i < lists.length; ++i)
{
    lists[i] = entered.subList(currentElement, (currentElement + 1000 < entered.size()) ? currentElement + 1000 : entered.size());
    currentElement += 1000;
}
于 2013-03-12T06:31:38.283 回答