数组包含另一个

时间:2011-09-05 12:26:20

标签: java arrays

我有一个包含一些字符串的数组tab1和另一个可以包含数组tab1的所有元素的数组。 我该怎么做才能避免重复使用tab1的相同元素:

String[] tab1 ={"AF","HB,"ER"} 
String[] tab2 ={"AF","HB,"ER","HO","NF","BB","CD","PO"}

我想说:tab2 = {tab1,“HO”,...} 任何想法?

感谢,

8 个答案:

答案 0 :(得分:1)

  

我该怎么做才能避免重复使用tab1的相同元素

您可以使用List,此处只有一个对象,例如"AF"有两个参考

List<String> a = new ArrayList<String>;
List<String> b = new ArrayList<String>; 
b.addAll(a);
b.add("HO");

答案 1 :(得分:1)

您可能希望使用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));

[当然如果你在第三个数组中有后面的元素,你可以迭代并添加它们]

答案 2 :(得分:0)

我担心这在Java中是不可能的。

但是,您可以使用ArrayList容器,该容器具有从Array复制其所有内容的构造函数。作为奖励,如果添加更多元素,ArrayList会自行调整大小,而数组则不会。

答案 3 :(得分:0)

使用apache commons lang库连接数组。

String[] tab1 ={"AF","HB,"ER"} 
String[] tab2 ={"HO","NF","BB","CD","PO"}

String[] concat = (String[]) ArrayUtils.addAll(tab1, tab2);

答案 4 :(得分:0)

Arrays.asList(...).contains(...) 

这是你可以使用的最佳解决方案,如果你不想去cocatination。 但我仍然觉得kmb35方式确实是最好的方式

    String[] tab1 ={"AF","HB,"ER"}    
    String[] tab2 ={"AF","HB,"ER","HO","NF","BB","CD","PO"}
    String[] concat = (String[]) ArrayUtils.addAll(tab1, tab2);   

别忘了使用apache库。 你也可以选择tab2作为

    private static final Set<String> tab2 = new HashSet<String>(Arrays.asList(
        new String[] {...//tab1 elements//...)); 

答案 5 :(得分:0)

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]
         */
    }
}

答案 6 :(得分:0)

我可能会按照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"));
        }};
    }
}

我知道有点奇怪的语法。也许有些人不喜欢它,但它很紧凑,所以我这样做。

答案 7 :(得分:0)

创建一个TreeSet(有序集),然后将其分配给数组。

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);