如何从Java中的两个数组中删除重复对?
问题描述:
a = [1,3,5,7,9,3]
b = [2,1,7,9,5,1]
a[5]
& b[5]
是重复的a[1]
& b[1]
。有什么办法从两个数组中删除所有重复的对吗?任何帮助都会很棒。如何从Java中的两个数组中删除重复对?
答
有没有简单的方法来做到这一点:
- 创建
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++;
}
}
答
这可能是可优化的,但这工作正常。 这只会删除重复,并保留原件。
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]
+0
我认为这个想法是删除_pairs_重复,考虑到每个“pair”是来自'a'的一个元素和来自'b'的一个元素。您的解决方案分别从每个数组中删除重复的元素,这似乎不是OP想要的。另外,解决方案1不保留顺序。 – Grodriguez
+0
oooh我明白了,我会更新我的答案。 – Asew
你能告诉我们你的尝试吗? –
欢迎来到Stack Overflow!请参考[游览](http://stackoverflow.com/tour),环顾四周,阅读[帮助中心](http://stackoverflow.com/help),特别是[我该如何问一个好问题?](http://stackoverflow.com/help/how-to-ask)和[我可以问什么问题?](http://stackoverflow.com/help/on-topic)。从第二个环节来看:“提出作业帮助的问题必须包括您迄今为止解决问题所做的工作的总结,并描述您解决问题的难度。” –
我不知道该怎么做...... :( –