删除Long数组中的重复项

时间:2015-09-22 11:33:13

标签: java arrays

我有两个Long数组元素,两者都有一些值

Long[] firstArray = new Long[10];
Long[] secondArray = new Long[25];

阵列的大小可能相同也可能不同。

firstArray[0] = new Long("1"); 
firstArray[1] = new Long("2"); 
firstArray[2] = new Long("3"); 

secondArray [0] = new Long("2"); 
secondArray [1] = new Long("3"); 

我想将secondArrayfirstArray进行比较,并使用不在thirdArray中的值创建新的secondArray

在上面的例子中,thirdArray只有1

4 个答案:

答案 0 :(得分:5)

一种可能的解决方案是将两个数组转换为List并使用removeAll

String

答案 1 :(得分:2)

将其中一个数组转储到集合中会更有效率,因此您可以执行快速搜索:

Set<Long> set = new HashSet<>(Arrays.asList(second));

之后你可以使用:

List<Long> list = new ArrayList<>(Arrays.asList(first));
list.removeAll(set);
return list.toArray(new Long[list.size()]);

在Java-8中更简单:

return Stream.of(first).filter(e -> !set.contains(e)).toArray(Long[]::new);

答案 2 :(得分:1)

如果您需要跟踪重复元素的数量,可以使用Map<Long, Long>

构建地图(简单forstream()groupingBy()),然后迭代第二个数组并减少每个键的计数,然后迭代地图的对并再次构建数组。

答案 3 :(得分:1)

在Java 8中:

Set<Long> set = Stream.of(secondArray).collect(Collectors.toSet());
Long[] thirdArray = Stream.of(firstArray).filter(e -> !set.contains(e)).toArray(Long[]::new);