【问题标题】:Use Arrays when initializing another Array at specific position在特定位置初始化另一个数组时使用数组
【发布时间】:2020-10-09 08:53:05
【问题描述】:

我有一个整数数组。 int[] arr1 = new int[] {3, 4, 5};。我想在初始化另一个数组时插入这个数组。所以当 int[] arr2 = new int[] {8, 7, arr1, 1, 0};,arr2 将等于 {8, 7, 3, 4, 5, 1, 0}

另外,我不知道arr1的长度,所以我不能做int[] arr2 = new int[] {8, 7, arr1[0], arr1[1], arr1[2], 1, 0};

非常感谢任何帮助。

【问题讨论】:

  • 这能回答你的问题吗? Java: How to set an array with another array?
  • 你想要一个单行解决方案还是可以用 2 或 3 行回答?
  • @Milgo 不,这不能解决我的问题。它使用ArrayUtils.addAll。我需要数组位于第二个数组中的特定位置。
  • 没有原生的方法,写一个for循环遍历内部数组并在外部设置它的值。
  • @0009laH 我当然更喜欢一个班轮。但如果它需要 2 或 3 行,那也没关系。

标签: java arrays integer


【解决方案1】:

可悲的是,据我所知,这样的事情无法在一次操作中完成。我能想到的最好的方法是创建一个result 数组。然后复制arr2 的第一部分,整个arr1,最后是arr2 的第二部分。最后整个方法看起来像这样:

private static int[] insertArrayAtPosition(int[] arr1, int[] arr2, int insertPos){
    int[] result = new int[arr1.length + arr2.length];
    System.arraycopy(arr2, 0, result, 0, insertPos);
    System.arraycopy(arr1, 0, result, insertPos, arr1.length);
    System.arraycopy(arr2, insertPos, result, insertPos + arr1.length, arr2.length - insertPos);
    return result;
}

然后你可以这样称呼它:

public static void main(String args[]) {
    int[] arr1 = new int[] {3, 4, 5};
    int[] arr2 = new int[] {8, 7, 1, 0};
    int[] result = insertArrayAtPosition(arr1, arr2, 2);
    System.out.println(Arrays.toString(result));
}

编辑:Milgo 的解决方案看起来好多了。但是,我的允许在它们已经创建后将一个数组插入到另一个数组中的特定位置。使用哪一个取决于用例。

【讨论】:

    【解决方案2】:

    你可以使用ArrayUtils.addAll() 三次。

    int[] arr1 = new int[] {3, 4, 5};
    int[] arr2 = new int[arr1.length + 4];
    ArrayUtils.addAll(arr2, new int[]{8, 7});
    ArrayUtils.addAll(arr2, arr1);
    ArrayUtils.addAll(arr2, new int[]{1, 0});
    

    ArrayUtils 是Apache Commons 的一部分。

    【讨论】:

    • ArrayUtils 似乎不存在。我正在使用没有外部库的 Java 8
    • 它是 Apache Commons 的一部分。
    • 在代码中显式导入org.apache.commons.lang.ArrayUtils 是否有效?
    • @0009laH 不,您必须先下载外部 jar 文件。
    【解决方案3】:

    这在 java 中不受本机支持 / 没有允许您使用 one liner 的语言功能。 您当然可以编写一个循环来插入另一个数组的元素,您也可以使用列表接口或 Arrays#stream。最好的方法应该是使用列表,如下所示:

    List<Integer> arr1 = Arrays.asList(3, 4, 5);
    List<Integer> arr2 = Arrays.asList(8, 7, 1, 0);
    arr2.addAll(2, arr1);
    

    希望这会有所帮助。

    编辑:顺便说一句:)

    【讨论】:

    • arr1arr2int[],而不是 List&lt;Integer&gt;。从一个切换到另一个需要几行代码
    • 是的,我知道,但我说最好使用 List 界面。此外,您可以将数组“转换”为列表。
    • 只有当列表具有相同的模板(List&lt;Integer&gt;Integer[])时,才能将列表转换为数组,但List&lt;Integer&gt;int[] 没有一行转换。它需要将每个元素从Integer 转换为int,反之亦然。尽管如此,我同意在他的情况下它更适合与List&lt;Integer&gt;一起工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    相关资源
    最近更新 更多