我需要创建大小为 1000 的 Arraylist,当用户输入多个值时动态创建。假设用户输入 2200 个值,则需要动态创建 2 个 1000 个 ArrayList,并且必须动态创建一个 200 个 Arraylist。我该怎么办?我只知道我可以使用对象的 Arraylist。请帮忙
问问题
6786 次
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 回答