0

我有一个方法需要返回一个 long 数组。

long[] mainMethod() {

     //create the resultant array 
     long[] result = null;

     method1(result);   // Their job is to append new long values to the array
     method2(result);
}

我希望做这样的事情:

    // Update the result array
    int origLen = (result == null) ? 0 : result.length;
    long[] newResult = new long[origLen + 4];

    if (origLen != 0) {
        newResult = Arrays.copyOf(result, origLen + 4);
    }

    newResult[origLen + 0] = someLong;
    newResult[origLen + 1] = someLong;
    newResult[origLen + 2] = someLong;
    newResult[origLen + 3] = someLong;
    result = newResult;

当我意识到 java 按值传递引用时,我无法在此处更改引用。如果不能更改这些方法的定义(要生成的结果将作为参数传递,因为存在其他返回值),我该如何更新原始数组?有人告诉我不要使用 ArrayList(我可以更新方法来获取 ArrayList,但有人告诉我使用 ArrayList 并最终返回 long 数组是愚蠢的)..

我在想我最初可以分配 4 个长值,然后继续传递它并复制它,例如:

    result = Arrays.copyOf(result, origLen + 4);

我认为这可以工作,但是我如何检查实际返回的数组是否mainMethod包含一些有用的信息?截至目前,我正在检查它是否为空..

提前致谢。

4

2 回答 2

0

你可以这样做:

long[] mainMethod() {

     //create the resultant array 
     long[] result = null;

     result = method1(result);   // Their job is to append new long values to the array
     result = method2(result);
}

只需确保您的方法 1 和方法 2 返回 long[]。

于 2013-09-11T14:04:31.523 回答
0

如果您想要一个可动态调整大小的数据结构,请不要使用数组。

在这种情况下,您可以非常轻松地使用LinkedList.

List<Long> result = new LinkedList<>();
method(result); // adds to result
method(result); // adds more to result

Long[] array = result.toArray(new Long[result.size()]);
于 2013-09-11T14:08:54.660 回答