我有一个包含一些字符串的数组tab1,还有另一个数组,可能包含数组tab1中的所有元素。我该如何避免重复使用tab1中相同的元素:
String[] tab1 ={"AF","HB,"ER"}
String[] tab2 ={"AF","HB,"ER","HO","NF","BB","CD","PO"}
我想说:tab2 = {tab1,"HO",...} 有什么想法吗?
谢谢。
我有一个包含一些字符串的数组tab1,还有另一个数组,可能包含数组tab1中的所有元素。我该如何避免重复使用tab1中相同的元素:
String[] tab1 ={"AF","HB,"ER"}
String[] tab2 ={"AF","HB,"ER","HO","NF","BB","CD","PO"}
List<String> a = new ArrayList<String>;
List<String> b = new ArrayList<String>;
b.addAll(a);
b.add("HO");
你可能想使用 Arrays.copyOf() 来创建一个大小为 tab1.length + 5 的数组,它以 tab1 的元素开头,然后再[手动]添加 tab2 的元素。
简单示例:
String[] tab1 ={"AF","HB","ER"};
String[] tab2 = Arrays.copyOf(tab1, tab1.length+5);
tab2[3] = "HO";
tab2[4] = "NF";
tab2[5] = "BB";
tab2[6] = "CD";
tab2[7] = "PO";
System.out.println(Arrays.toString(tab2));
[当然,如果您有第三个数组中的后续元素,您可以迭代并将它们添加]
String[] tab1 ={"AF","HB,"ER"}
String[] tab2 ={"HO","NF","BB","CD","PO"}
String[] concat = (String[]) ArrayUtils.addAll(tab1, tab2);
Arrays.asList(...).contains(...)
如果您不想使用连接,这是您可以使用的最佳解决方案。 但我仍然觉得kmb35的方法是最好的
String[] tab1 ={"AF","HB,"ER"}
String[] tab2 ={"AF","HB,"ER","HO","NF","BB","CD","PO"}
String[] concat = (String[]) ArrayUtils.addAll(tab1, tab2);
private static final Set<String> tab2 = new HashSet<String>(Arrays.asList(
new String[] {...//tab1 elements//...));
public class TestBoth {
public static String[] join(String[]... params) {
// calculate size of target array
int size = 0;
for (String[] array : params) {
size += array.length;
}
String[] result = new String[size];
int j = 0;
for (String[] array : params) {
for (String s : array) {
result[j++] = s;
}
}
return result;
}
public static void main(String[] args) {
String[] tab1 = {"AF","HB", "ER"};
String[] mtab = {"HO","NF","BB","CD","PO"};
String[] tab2 = (String[]) join(tab1, mtab);
System.out.println(java.util.Arrays.toString(tab2));
/*
* output : [AF, HB, ER, HO, NF, BB, CD, PO]
*/
}
}
我可能会按照Jigar Joshi建议的方法来做,就像这样:
import java.util.Arrays;
import java.util.ArrayList;
class Test {
public static void main(String[] args) {
ArrayList<String> tab1 = new ArrayList<String>(Arrays.asList("AF", "HB", "ER"));
ArrayList<String> tab2 = new ArrayList<String>(tab1) {{
addAll(Arrays.asList("HO", "NF", "BB", "CD", "PO"));
}};
}
}
语法有点奇怪,我知道。也许有些人不喜欢它,但是它很紧凑,所以我喜欢。
TreeSet<String> tabSet = new TreeSet<String>();
tabSet.add("e1");
// rest of tab1 elements
String [] tab1 = Collections.toArray(tabSet);
tabSet.add("e2");
// add missing tab2 elements
String [] tab2 = Collections.toArray(tabSet);
很抱歉,在Java中这是不可能的。
但是,您可以使用一个ArrayList容器,它具有从数组复制所有内容的构造函数。作为奖励,如果您添加更多元素,ArrayList会自动调整大小,而数组则不会。