如何从Java中的两个数组中删除重复对?

时间:2017-07-18 07:46:43

标签: java arrays

a = [1,3,5,7,9,3]
b = [2,1,7,9,5,1]

a[5]& b[5]重复a[1]& b[1]。有没有办法从两个数组中删除所有重复的对?任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

没有简单的方法可以做到这一点:

  • 创建一对Set(无重复)对(a中的一个值,b中的一个值)
  • 将集合的值添加到数组
 public static void main(String[] args) {
        int[] a = new int[]{1, 3, 5, 7, 9, 3};
        int[] b = new int[]{2, 1, 7, 9, 5, 1};

        Set<Pair<Integer, Integer>> set = new LinkedHashSet<>();
        for (int i = 0; i < b.length; i++) {
            set.add(new Pair<>(a[i], b[i]));
        }

        a = new int[set.size()];
        b = new int[set.size()];
        int i = 0;

        for (Pair<Integer, Integer> pair : set) {
            a[i] = pair.getKey();
            b[i] = pair.getValue();
            i++;
        }
}

答案 1 :(得分:0)

这可能是可以优化的,但这很好。 这只会删除副本,并保留原件。

Integer[] a = {1,3,5,7,9,3};
Integer[] b = {2,1,7,9,5,1};

ArrayList<Integer> al = new ArrayList<Integer>();
al.addAll(Arrays.asList(a));

ArrayList<Integer> bl = new ArrayList<Integer>();
bl.addAll(Arrays.asList(b));

HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
int i = 0;

while( i < al.size() -1 ){    
    map.put(al.get(i),bl.get(i));    
    i++;                  
}

int y = map.size();
Integer[] af = map.keySet().toArray(new Integer[y]);
Integer[] bf = map.values().toArray(new Integer[y]);

System.out.println((Arrays.asList(af)).toString());
//Output : [1, 3, 5, 7, 9]
System.out.println((Arrays.asList(bf)).toString());
//Output : [2, 1, 7, 9, 5]