java 计算两个List<String> 左差集 不要用contaions来进行比较
时间: 2024-03-17 22:39:49 浏览: 58
如果不想使用`contains`方法,可以使用Java8的Stream API中的`anyMatch`方法来实现。代码如下:
```java
List<String> list1 = Arrays.asList("a", "b", "c");
List<String> list2 = Arrays.asList("b", "c", "d");
List<String> diff = list1.stream()
.filter(str -> list2.stream().noneMatch(str2 -> str.equals(str2)))
.collect(Collectors.toList());
System.out.println(diff); // 输出 [a]
```
上面的代码中,使用`noneMatch`方法来判断另一个List中是否存在当前元素。如果`noneMatch`方法返回`true`,说明另一个List中没有该元素,这样就可以将该元素添加到左差集中。
相关问题
java 计算两个List<String> 左差集 不要用contaions来进行比较 并且提示计算效率
计算两个List<String>的左差集可以使用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<>(list2);
List<String> diff = list1.stream()
.filter(str -> !set.contains(str))
.collect(Collectors.toList()));
System.out.println(diff); // 输出 [a]
```
上面的代码中,首先将其中一个List中的元素存储到Set中,然后使用`filter`方法过滤出另一个List中不包含在Set中的元素,将结果收集到一个新的List中,最终得到两个List的左差集。
这样可以大大提高计算效率,避免了使用List的`contains`方法时需要遍历整个List的问题,时间复杂度为O(n)。而使用Set的`contains`方法时只需要判断是否包含在Set中,时间复杂度为O(1)。
java 计算两个List<String> 右差集 不要用contaions来进行比较
如果不想使用`contains`方法,可以使用Java8的Stream API中的`anyMatch`方法来实现。代码如下:
```java
List<String> list1 = Arrays.asList("a", "b", "c");
List<String> list2 = Arrays.asList("b", "c", "d");
List<String> diff = list2.stream()
.filter(str -> list1.stream().noneMatch(str2 -> str.equals(str2)))
.collect(Collectors.toList());
System.out.println(diff); // 输出 [d]
```
上面的代码中,使用`noneMatch`方法来判断另一个List中是否存在当前元素。如果`noneMatch`方法返回`true`,说明另一个List中没有该元素,这样就可以将该元素添加到右差集中。
阅读全文