java 计算两个List<String> 共同差集 不要用contaions来进行比较 并且提示计算效率
时间: 2024-03-17 22:39:42 浏览: 17
使用Java8的Stream API中的`anyMatch`方法来实现,并且优化计算效率可以使用Set来存储其中一个List中的元素,这样判断是否包含在Set中的时间复杂度为O(1),而不是使用List的`contains`方法的O(n)。代码如下:
```java
List<String> list1 = Arrays.asList("a", "b", "c");
List<String> list2 = Arrays.asList("b", "c", "d");
Set<String> set = new HashSet<>(list1);
List<String> diff = list2.stream()
.filter(str -> !set.contains(str))
.collect(Collectors.toList());
set.addAll(list2);
diff.addAll(list1.stream()
.filter(str -> !set.contains(str))
.collect(Collectors.toList()));
System.out.println(diff); // 输出 [a, d]
```
上面的代码中,首先将其中一个List中的元素存储到Set中,然后使用`filter`方法过滤出另一个List中不包含在Set中的元素,将结果收集到一个新的List中。接着将另一个List中的元素添加到Set中,最后再次使用`filter`方法过滤出第一个List中不包含在Set中的元素,将结果添加到之前收集的List中,最终得到两个List的共同差集。
这样可以大大提高计算效率,避免了使用List的`contains`方法时需要遍历整个List的问题,时间复杂度为O(n)。而使用Set的`contains`方法时只需要判断是否包含在Set中,时间复杂度为O(1)。