假设我有一个数组,arrayA = "a","b","c","d","e","f",另一个数组,arrayB = "a","d","e“。
我想从arrayA中减去arrayB,得到结果= "b","c","f“
这是我对每个阵列的设置:
char[] arrayA = new char[7];
for(char c = 'a'; c <= 'f'; ++c) {
arrayA[c - 'a'] = c;
}
char[] arrayB = new char[]{'a','d','e'};
(请原谅对符号和语法的不当使用,我是Ruby新手,只是想从Oracle教程中学习Java。谢谢!)编辑:一个单词和引号
发布于 2013-06-25 20:47:25
简短的答案是将数组转换为“集合”,然后对它们使用集合操作。我现在正在寻找合适的代码,但你可以先看看这篇文章:Classical set operations for java.util.Collection
编辑: Luke657提出了一个很好的观点。原始数组很奇怪。下面是更新后的代码:
假设您从一个char数组开始(当然,从一个set开始会更好,但是哦,好吧):
char[] arrayA = new char[] {'a', 'b', 'c', 'd', 'e', 'f'};
char[] arrayB = new char[] {'a', 'd', 'e'};
Character[] objarrayA = ArrayUtils.toObject(arrayA);
Character[] objarrayB = ArrayUtils.toObject(arrayB);
Set<T> setA = new HashSet(Arrays.asList(objarrayA));
Set<T> setB = new HashSet(Arrays.asList(objarrayB));
setA.removeAll(setB);
然后,要将其返回到char数组:
Character[] result;
result = setA.toArray(result);
char[] cresult = ArrayUtils.toPrimitive(result);
我相信这会满足你的需要。Arrays.asList()
操作是O(1),因此是有效的,并且计算成本不高,所以不用担心额外的转换。
发布于 2013-06-25 20:48:21
将它们转换为List并调用removeAll
方法:
Character[] array1 = ArrayUtils.toObject(arrayA);
Character[] array2 = ArrayUtils.toObject(arrayB);
List<Character> list1 = new ArrayList(Arrays.asList(array1));
List<Character> list2 = new ArrayList(Arrays.asList(array2));
list1.removeAll(list2);`
发布于 2013-06-25 20:47:28
我建议您从arrayA
构造一个Set,然后使用第二个数组对其调用removeAll
。
如果按照问题中所示对两个数组进行排序,则可以通过对数组进行一次迭代来解决问题。
https://stackoverflow.com/questions/17297698
复制相似问题