我知道还有其他与此主题相关的问题。 但这有点不同。
想象一下,你有一个程序可以从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
答案 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;
}