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

标签 java arrays object 2d

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

想象一下,您有一个程序,每隔一段时间从 Excel 中获取一个 2d 对象 (Object[][]),并将其传递给一个方法;此方法需要连接此 2d 对象,因此当它收到没有更多输入的标志时,它将这个潜在大 2d 对象作为结果传递给其他方法...

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

2)每个二维对象可以有不同的列数和行数(好吧,这不是一个大问题)

java中有没有一种方法可以将二维对象连接成一个?没有“杀死”内存。

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

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

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

tnx

最佳答案

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

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

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

关于Java:动态连接未指定数量的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34167489/

相关文章:

mysql - 通过键将两个表连接到数组中

javascript - 避免在新推送的 json 嵌套数组中建立索引

C qsort 不对多维数组中的最后一项进行排序

PHP:对象的array_filter?

javascript - 如何将对象内部的属性合并为一个属性?

java - 有人可以告诉我为什么 out.println 不起作用吗?

java - 函数式编程将代码转换为声明式风格

javascript - Javascript 类中的静态变量

java程序支持多种语言

java - mongo-hadoop-saveAsNewAPIHadoopFile()-旧文件夹未清理