java中数组的并集

java中数组的并集,java,Java,我是一个初学者,我尝试打印两个数组的并集,即两个数组中的元素没有任何重复。当我尝试打印第三个数组时,它给了我不同的输出。我还没有打印遗漏的元素(在本例中为34) 我得到的结果是: 处理时打印1 4 3 2 22 6。在处理后打印整个第三个数组将产生12232000 我希望得到如下输出:143222634 public static void main(String[] args) { // TODO Auto-generated method stub int[] array1=

我是一个初学者,我尝试打印两个数组的并集,即两个数组中的元素没有任何重复。当我尝试打印第三个数组时,它给了我不同的输出。我还没有打印遗漏的元素(在本例中为34)

我得到的结果是:

处理时打印
1 4 3 2 22 6
。在处理后打印整个第三个数组将产生
12232000

我希望得到如下输出:
143222634

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int[] array1={1,22,34,4};
    int[] array2={1,4,3,2,22,6};

    int[] array3=new int[array1.length+array2.length];

    int i=0;
    int j=0;
    System.out.println("Printing while processing");
    while(i<array1.length && j<array2.length){
        if(array1[i]<array2[j]){
            array3[i]=array1[i];
            System.out.print(array3[i]+" ");
        i++;
        }
        else if(array2[j]<array1[i]){
            array3[j]=array2[j];
            System.out.print(array3[j]+" ");
            j++;
        }
        else{
            array3[i]=array1[i];
            System.out.print(array3[i]+" ");
            i++;
            j++;
        }
    }

    System.out.println("\nPrinting entire 3rd array after the process");
for(int k=0;k<array3.length;k++)
    System.out.print(array3[k]+" ");

   //The left out elements in the rest of the arrays are yet to be printed
}
publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
int[]数组1={1,22,34,4};
int[]array2={1,4,3,2,22,6};
int[]array3=新int[array1.length+array2.length];
int i=0;
int j=0;
System.out.println(“处理时打印”);

而(i第一个问题是对未排序的数据应用排序合并算法

第二个问题是,您正在使用
i
j
,索引到两个原始数组中,作为
array3
中的索引,即输出。此数组应该有自己的索引,例如
k
,它应该与其他两个数组分开

第三个问题是,当到达两个数组中任何一个的末尾时,您会停止,而没有完成它们的“尾部”:

Arrays.sort(array1);
Arrays.sort(array2);
int i=0;
int j=0;
int k=0;
System.out.println(“处理时打印”);
而(i

就是为了做到这一点而开发的

例子: 编辑:使用java8我们可以删除重复的元素

int[] result = Arrays.stream(array3).distinct().toArray();

你得到了什么?你期望得到什么?你能定义“数组的并集”吗?预期结果是什么?两个数组中的元素没有任何重复。好的,但顺序是什么?在处理过程中打印1 4 3 2 22 6在处理过程后打印整个第三个数组1 22 3 2 0 6 0 0 0 0 0 0 0这是我得到的输出。我只是想知道为什么我得到不同的输出。我的意思是我打印同一个数组。我是tr我希望找到没有任何预定义函数的联合。为什么不使用Java的联合呢?那太棒了!说真的,我不喜欢有愚蠢要求的问题。如果语言为您的用例提供了一些东西,为什么不使用它呢?您只是将前两个数组的元素复制到第三个数组中。我要求数组的联合,这意味着所有元素没有任何重复。我不是回答者。另外,由于你的问题没有明确说明所需的输出,因此答案不符合你的口味也就不足为奇了。无论如何,如果你想删除重复项,只需使用
。如果你想保持顺序,请使用
LinkedHashSet
@dasbLinkedLight,如果我们仔细阅读,请使用
LinkedHashSet
@dasbLinkedLight他再次质问,我们将找不到允许或不允许复制的参考……我仍然得到不同的输出,你能告诉我如何打印遗漏的元素吗?@Dici三向
如果
内部,而
选择最小的元素几乎没有让人怀疑OP的意图。这是一个不完美的简单方法经典有序合并的重新设置。但看看所需的输出,它与已排序的合并不对应。输入也不对应。@suze看一下编辑。您的算法采用已排序的输入;否则,您应该在超过当前位置的位置上查找重复项。@dasblinkenlight您的代码工作正常。非常感谢。您可以吗你可以解释为什么我没有对输入进行排序就会得到重复的结果。
public static void main(String[] args)   {
int[] array1 = { 1, 22, 34, 4 };
int[] array2 = { 1, 4, 3, 2, 22, 6 };
int[] array3 = new int[array1.length + array2.length];

System.arraycopy(array1, 0, array3, 0, array1.length);
System.arraycopy(array2, 0, array3, array1.length, array2.length);
System.out.println(Arrays.toString(array3));
}
int[] result = Arrays.stream(array3).distinct().toArray();