Java:以二进制方式连接未指定数量的2d数组

Java:以二进制方式连接未指定数量的2d数组,java,arrays,object,2d,Java,Arrays,Object,2d,我知道还有其他与这个话题相关的问题。 但这有点不同 Immagine您有一个程序,每隔一段时间从excel获取一个2d对象(对象[][]),并将其传递给一个方法;这个方法需要连接这个2d对象,所以当它得到一个没有更多输入的标志时,它会将这个潜在的大2d对象作为一个结果传递给另一个方法 1) 您不知道将发送多少excel文档,因此您将获得多少2d对象 2) 每个二维对象可以有不同的列和行数(好的,这不是大问题) java中有没有一种方法可以将2d对象连接成一个?没有“杀死”记忆 看看这个公认的答案

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

Immagine您有一个程序,每隔一段时间从excel获取一个2d对象(对象[][]),并将其传递给一个方法;这个方法需要连接这个2d对象,所以当它得到一个没有更多输入的标志时,它会将这个潜在的大2d对象作为一个结果传递给另一个方法

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

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

java中有没有一种方法可以将2d对象连接成一个?没有“杀死”记忆

看看这个公认的答案 有一个append方法,但每次调用它时(在本例中,我们不知道可以调用多少次),它都会重新创建一个2d数组,在我看来,这不是该解决方案的最佳实践

看看这个公认的解决方案,使用了一个arraycopy解决方案,我对它的理解与前面的解决方案类似。。。也许会好一点

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


tnx

看起来您需要的是ArrayList>而不是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;
}
public List concat(列表1、列表2){
if(list1.size()>list2.size()){
List listBig=new ArrayList(list1);//如果我们可以更改list1,就只列出list1
List LISTSMOLL=list2;
}否则{
List listBig=new ArrayList(list2);//或者如果我们可以更改list1,只列出list1
List LISTSMOLL=list1;
}
对于(int i=0;i
看起来您需要的是ArrayList>而不是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;
}
public List concat(列表1、列表2){
if(list1.size()>list2.size()){
List listBig=new ArrayList(list1);//如果我们可以更改list1,就只列出list1
List LISTSMOLL=list2;
}否则{
List listBig=new ArrayList(list2);//或者如果我们可以更改list1,只列出list1
List LISTSMOLL=list1;
}
对于(int i=0;i
Tnx,但是:1)每次我调用concat(可以多次),我都需要创建新的ArrayList(列表1)?(如果每次第一个“如果”通过)2)for循环不好,对吗?因为它可以覆盖listBig,listBig[i]必须从listBig?Tnx的最后一个元素开始,但是:1)每次调用concat(可以多次),我都需要创建新的ArrayList(list1)?(如果每次第一个“如果”通过)2)for循环不好,对吗?因为它可以覆盖listBig,listBig[i]必须从listBig的最后一个元素开始?