我知道还有与此主题相关的其他问题。 但这有点不同。
想象一下,您有一个程序,每隔一段时间从 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/