使用Java在两个数组之间查找非重复项

时间:2013-10-16 10:57:22

标签: java arrays hashmap find

我有以下任务: 在-20000000和20000000之间有2个一维整数数组。第一个数组中包含的一些数字也包含在第二个数组中。我必须找到第一个数组中包含的所有数字,但不包含在第二个数组中。我必须使用Java作为语言

这是数组

[1,652,5,15,385,4,55,666,13]

[2,4658,9,55,-588,10,1083,17]

任何想法如何找到它?

编辑:

以下是最终代码:

import java.util.ArrayList;
import java.util.List;
public class Values {
public static void main (String[] argv) {

int[] Array1 = new int[] {1,652,5,15,385,4,55,666,13};
int[] Array2 = new int[] {2, 4658, 9, 55, -588, 10, 1083, 17};
int calculateResult = 0;
boolean contains = false;
int mod = 123456789; 
int modSum = 0;

List<Integer> results = new ArrayList<Integer>();
    for(int i=0; i<Array1.length; i++) {
        for(int j=0; j<Array2.length; j++) {
            if(Array1[i]==Array2[j]) {
                contains = true;
                break;
            }
        }
        if(!contains) {
            results.add(Array1[i]);
        }
        else {
            contains = false;
        }
    }
    // calculate the result
    for (int i : results) {
        calculateResult  += i;
    }
    // Print Results
    System.out.println(results);
    System.out.println(calculateResult);
}}

现在我正在尝试从.csv文件加载数组。有什么想法吗?

5 个答案:

答案 0 :(得分:1)

这是一个可能的解决方案:

    int[] Array1 = new int[] {1,652,5,15,385,4,55,666,13};
    int[] Array2 = new int[] {2,4658,9,55,-588,10,1083,17};
    boolean contains = false;
    List<Integer> results = new ArrayList<Integer>();


    for(int i=0; i<Array1.length; i++) {
        for(int j=0; j<Array2.length; j++) {
            if(Array1[i]==Array2[j]) {
                contains = true;
                break;
            }
        }
        if(!contains) {
            results.add(Array1[i]);
        }
        else{
            contains = false;
        }
    }

    System.out.println(results);

输出:

[1, 652, 5, 15, 385, 4, 666, 13]

我希望这就是你要找的东西。

答案 1 :(得分:0)

答案 2 :(得分:0)

我不明白为什么这个问题有负面投票,实际上非常有趣。

看下面哪个可能适合你,你只需要列表而不是数组

        List<Integer> l1 = new ArrayList<Integer>();
        List<Integer> l2 = new ArrayList<Integer>();

        l1.add(1);
        l1.add(3);
        l1.add(5);
        l1.add(7);
        l1.add(8);

        l2.add(2);
        l2.add(3);
        l2.add(4);
        l2.add(7);

        l2.retainAll(l1);  //Now l2 have only common elements of both list this is an optional this will work well when there are thousands of element otherwise only do remove all
        l1.removeAll(l2);  //Here magic happens this will remove common element from l1 so l1 will have only elements what are not in l2

        for(Integer v: l1){
            System.out.println(v);
        }

<强>输出:

1
5
8

答案 3 :(得分:0)

取第一个数组,并且,对于它的每个元素,如果这不是第二个数组的元素,那么把它当作好,否则丢弃它。

现在你只需研究如何用java语言编写它!

答案 4 :(得分:0)

你可以这样做。

Integer[] array1  = {1, 652 ,5, 15, 385, 4 , 55, 666, 13};
Integer[] array2 ={2, 4658, 9, 55, -588, 10, 1083, 17};
List<Integer> list=  new ArrayList<Integer>(Arrays.asList(array1));
TreeSet<Integer> set = new TreeSet<Integer>(list);
set.removeAll(Arrays.asList(array2));

System.out.println(set);