Java:以非连续方式连接未指定数量的2d阵列

时间:2015-12-08 22:43:14

标签: java arrays object 2d

我知道还有其他与此主题相关的问题。 但这有点不同。

想象一下,你有一个程序可以从excel中获取每个一些时间一个2d对象(Object [] [])并将它传递给一个方法;这个方法需要连接这个2d对象,所以当它得到一个没有更多输入的标志时,它会将这个可能很大的 2d对象传递给其他方法......

1)您不知道将发送多少个Excel文档,因此您将获得多少个2d对象

2)每个2d对象可以有不同数量的列和行(确定这不是一个大问题)

java中有没有办法将2d对象连接成一个?无法“杀死”记忆。

看着这个接受的答案 How do you append two 2D array in java properly? 有一个append方法,但每次调用它时(在这个描述的情况下我们不知道可以调用多少次),它重新创建一个二维数组,并且在我的选择中不是这个解决方案的最佳实践。

看一下这个被接受的解决方案How to concatenate two-dimensional arrays in Java,我们使用了一个 arraycopy 解决方案,我的理解与以前的解决方案类似......可能会更好一点。

我知道可以使用某些列表,这些列表可能会以某种方式显示这个2d对象,或者在2d对象的末尾进行解析,但是: 是否有任何方法在java(良好实践)中将dinamically未知数量的2d对象连接成1?

TNX

1 个答案:

答案 0 :(得分:0)

看起来你需要ArrayList< ArrayList<对象> >而不是Object [] []。如果使用ArrayList,则不同的列数和行数根本不存在问题,并且您不会" kill"如果你使用addAll方法的内存。此外,您可以使用核心Java方法来连接ArrayLists而无需创建自己的手动方法。

例如,您可以使用以下内容:

public List<ArrayList<Object>> concat (List<ArrayList<Object>> list1, List<ArrayList<Object>> list2) {
   if(list1.size() > list2.size()) {
      List<ArrayList<Object>> listBig = new ArrayList(list1); // or just list1 if we can change list1
      List<ArrayList<Object>> listSmall = list2;
   } else {
      List<ArrayList<Object>> listBig = new ArrayList(list2); // or just list1 if we can change list1
      List<ArrayList<Object>> listSmall = list1;
   }

   for(int i = 0; i < listSmall.size(); i++) {
      listBig[i].addAll(listSmall[i]); 
   }
   return listBig;
}