我有两个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");
我想将secondArray
与firstArray
进行比较,并使用不在thirdArray
中的值创建新的secondArray
。
在上面的例子中,thirdArray
只有1
答案 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>
。
构建地图(简单for
或stream()
和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);