List<String>转Set<String>
时间: 2024-09-12 15:02:02 浏览: 42
List<String>转换为Set<String>通常是为了去除重复的元素,因为Set不允许包含重复的元素。在Java中,有多种方法可以实现这种转换:
1. 使用`Collections`类的`copy`方法结合`HashSet`构造函数:
```java
List<String> list = Arrays.asList("a", "b", "a", "c", "b");
Set<String> set = new HashSet<>(list.size());
Collections.copy(set, list);
```
这段代码会抛出`IndexOutOfBoundsException`,因为`HashSet`的大小是不确定的,所以这个方法实际上是不可行的。应该先初始化`HashSet`的大小与`List`相同,如下:
```java
Set<String> set = new HashSet<>(Collections.nCopies(list.size(), (String) null));
Collections.copy(set, list);
```
2. 使用`Collections`类的`replaceAll`方法将List中的元素复制到`HashSet`中:
```java
List<String> list = Arrays.asList("a", "b", "a", "c", "b");
Set<String> set = new HashSet<>();
Collections.replaceAll(list, null, set);
Collections.replaceAll(set, set, null);
```
这段代码同样存在问题,因为`replaceAll`的目的是替换列表中的元素,而不是向`HashSet`添加元素。
正确的转换方法是直接将`List`中的元素添加到`HashSet`中,`HashSet`在添加时会自动去除重复的元素:
```java
List<String> list = Arrays.asList("a", "b", "a", "c", "b");
Set<String> set = new HashSet<>(list);
```
或者使用Java 8的Stream API:
```java
List<String> list = Arrays.asList("a", "b", "a", "c", "b");
Set<String> set = list.stream().collect(Collectors.toSet());
```
阅读全文