如何创建固定大小的对象的数组列表,并将剩余的值传递给下一个数组列表

问题描述:

我需要创建大小为1000的Arraylist,当用户输入一些值时动态创建。如果用户输入必须动态创建2200个值,每个1000个ArrayLists和200个Arraylist。我应该怎么办?我只知道我可以使用物体的Arraylist。请帮助如何创建固定大小的对象的数组列表,并将剩余的值传递给下一个数组列表

+0

[?你尝试过什么(http://mattgemmell.com/2008/12/ 08 /你有什么试过/) – 2013-03-12 06:18:33

+0

你可以发表一些代码吗?你试过什么? – Ajit 2013-03-12 06:19:17

+1

如果是有用的,请记住接受正确的答案。 – Javier 2013-03-12 09:02:27

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

+0

谢谢你..我可以使用..但如何使用对象动态创建arraylists? – user2159564 2013-03-12 06:47:26

您可以使用GuavasLists.partition操作将所有数据的列表分割为所需大小的块+其余块中的一块。总是为我工作。 Check the javadoc here if you're unsure

+0

谢谢..但我需要创建单独的列表。 – user2159564 2013-03-12 06:44:58

+0

那么它返回一个List列表,你可以从中检索它们。 :) – Scorpio 2013-03-12 06:49:10

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

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私有字段合理分区调试器观察。

+0

非常感谢你:-) – user2159564 2013-03-12 08:22:27

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

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; 
} 
+0

你在哪里看到数组被提及? – Makoto 2013-03-12 06:32:38

+0

你能告诉我如何去使用对象的数组列表吗? – user2159564 2013-03-12 06:46:06

+0

对不起,您需要从列表中获取或删除元素时进行类型转换。修复了另一个错误,需要在继续下一次迭代之前将1000添加到currentElement中。 – gparyani 2013-03-12 17:12:50