为什么数组存入HashSet前需先转换为List?能否直接存入?
问题解答
为什么需要先将String数组转换为List再存入HashSet?
Java 中的HashSet提供的可批量传入初始元素的构造方法,要求入参必须是Collection接口的实现类。而Java数组是独立的对象类型,没有实现Collection接口,不符合构造方法的入参要求,因此无法直接传入。
Arrays.asList(words)的作用是将数组包装为List类型(List是Collection的子接口),满足HashSet构造方法的参数要求,才能完成初始化时批量导入数组元素的操作。
可以直接将数组存入HashSet吗?
要看你对「存入」的定义:
- 如果你是想把数组中的每个字符串元素分别存入HashSet:不能直接通过构造方法传入数组实现,除了转List的方式之外,你也可以选择遍历数组逐个调用
add()方法添加元素,效果完全一致,示例代码如下:
public int begins(String[] words, String first) { HashSet<String> hset = new HashSet<>(); // 遍历数组逐个添加元素 for (String word : words) { hset.add(word); } char firstChar = first.charAt(0); int total = 0; for (String i : hset) { if (firstChar == (i.charAt(0))) { total += 1; } } return total; }
- 如果你是想把整个数组对象作为单个元素存入HashSet:是可以的,但不符合你当前的业务逻辑。这种情况下HashSet里只会存在一个数组类型的元素,遍历判断首字符的逻辑会完全失效。
额外注意
Arrays.asList()返回的是固定长度的List,不支持增删操作,但你当前场景下只是用它来初始化HashSet,HashSet会把List中的元素全部拷贝到自身的存储结构中,后续不会再用到这个临时List,所以不存在风险,可以正常使用。
内容的提问来源于stack exchange,提问作者mgm89
相关产品推荐
相关产品推荐

