我对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”。我知道有些方法可以做到这一点,但是您将如何手动进行呢?
答案 0 :(得分:5)
第一个也是首选选项是:
name = (String[])ArrayUtils.addAll(names, newNames);
第二个可能就是您正在做的事情,只需添加:
name = newName;
for
循环之后。
答案 1 :(得分:4)
allNames
分配给names
: names = allNames;
System.out.println(Arrays.toString(names));
clone
方法: names = allNames.clone();
System.out.println(Arrays.toString(names));
names = Arrays.copyOf(allNames, allNames.length);
System.out.println(Arrays.toString(names));
names = new String[allNames.length];
System.arraycopy(allNames, 0, names, 0, allNames.length);
System.out.println(Arrays.toString(names));
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)
数组是对象。因此,简单地设置名称= allNames实际上会使它们指向同一对象(不是分开的相同副本)。换句话说,如果您要在一个中将“ Sue”更改为“ Suzy”,则在另一个中将其更改。 假设您不需要单独使用它们,这是最简单,最有效的方法。