Java: 动态连接未指定数量的二维数组

Java: Concatenating not specified number of 2d Arrays dinamically

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

假设您有一个程序,每隔 一段时间 从 excel 获取一个二维对象 (Object[][]) 并将其传递给一种方法;这个方法需要连接这个 2d 对象,所以当它得到一个没有更多输入的标志时,它会将这个 可能很大 2d 对象作为结果传递给其他方法...

1) 你不知道会发送多少excel个文档,所以你会得到多少个二维对象

2) 每个 2d 对象可以有不同的列数和行数(好的,这不是什么大问题)

java 中有没有办法将二维对象连接成一个?没有 "killing" 内存。

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

查看这个公认的解决方案 How to concatenate two-dimensional arrays in Java 使用了 arraycopy 解决方案,我的理解与之前的解决方案类似......也许更好一点.

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

tnx

看起来您需要 ArrayList< ArrayList < Object >> 而不是 Object[][]。如果您使用 ArrayList,不同的列数和行数根本不是问题,如果您使用 addAll 方法,则不会 "killing" 内存。此外,您可以使用核心 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;
}