Java:如何用另一个数组设置一个数组?

时间:2019-02-07 15:26:14

标签: java arrays

我对Java还是很陌生,希望您能提出意见。

所以,我有一个数组:

String[] names = {"Anna", "Jo"};
String[] newNames = {"Bob", "Sue", "Jane"};
int totalLength = names.length + newNames.length;
String[] allNames = new String[totalLength];

我通过以下方式将它们合并在一起:

for (int i = 0; i < names.length; i++) {
    allNames[i] = names[i];
}
for (int i = 0; i < newNames.length; i++}
    allNames[i + names.length] = newNames[i];
}

我的问题是如何将allNames数组设置为原始名称数组?像是“ Anna”,“ Jo”,“ Bob”,“ Sue”,“ Jane”。我知道有些方法可以做到这一点,但是您将如何手动进行呢?

5 个答案:

答案 0 :(得分:5)

第一个也是首选选项是:

name = (String[])ArrayUtils.addAll(names, newNames);

第二个可能就是您正在做的事情,只需添加:

name = newName;

for循环之后。

答案 1 :(得分:4)

  1. 只需将allNames分配给names
        names = allNames;
        System.out.println(Arrays.toString(names));
  1. 或者直接使用clone方法:
        names = allNames.clone();
        System.out.println(Arrays.toString(names));
  1. 或使用Arrays.copyOf:
        names = Arrays.copyOf(allNames, allNames.length);
        System.out.println(Arrays.toString(names));
  1. 或使用System.arraycopy:
        names = new String[allNames.length];
        System.arraycopy(allNames, 0, names, 0, allNames.length);
        System.out.println(Arrays.toString(names));
  1. 或使用Java 8:
        names = Arrays.stream(allNames).toArray(String[]::new);
        System.out.println(Arrays.toString(names));

所有变体都可以完成工作:

[Anna, Jo, Bob, Sue, Jane]

但是,使用第一种方法,您只会将names的引用指向allNames。所有其他变体-将创建新数组并使用allNames值填充。通常最好是最后一种行为。

答案 2 :(得分:2)

有一个Arrays类,它提供诸如复制之类的功能。 Java程序员通常会在Web或IDE中搜索Javadoc。

答案将是:

names = allNames;

但是这样做却效率很低,无法交换整个数组的值。

在这种情况下,因为java数组中的数组是固定大小的,所以可以使用动态List或Set(用于唯一元素):

List<String> names = new ArrayList<>();
Collections.addAll(names, "Anna", "Jo");

List<String> newNames = Arrays.asList("Bob", "Sue", "Jane");
List<String> allNames = new ArrayList(names);
allNames.addAll(newNames);

答案 3 :(得分:1)

通常,数组具有固定大小。调整数组大小时,会将所有数据复制到新数据中。因此,当您不使用较大的大小初始化它们时,将无法执行此操作。其他答案中的方法可能会满足您的要求,但它们不会扩展原始数组。

答案 4 :(得分:1)

在Java中,

数组是对象。因此,简单地设置名称= allNames实际上会使它们指向同一对象(不是分开的相同副本)。换句话说,如果您要在一个中将“ Sue”更改为“ Suzy”,则在另一个中将其更改。 假设您不需要单独使用它们,这是最简单,最有效的方法。