项目场景:
今天刷LeetCode,用到了Arrays.asList()方法,但是由于没报错,所以一时不知错在哪。
public class mytest {
public static void main(String[] args) {
char[] cary = "abcde".toCharArray(); //举个例子
Set<Character> set = new HashSet(Arrays.asList((cary)));
System.out.println(set.size());
}
}
/*结果
1
*/
问题描述:
我记得Arrays.asList()确实能吧数组转换为ArrayList()的啊。所以set.size()=5才对。然而等于1.
原因分析:
查看Arrays.List()源码
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
一开始没看出个所以然,但是在idea中,鼠标指向T的时候
T是个继承于Object的类,并非基本类型,所以char[]作为参数导入事,T 为char[]。也就是Arrays.asList(传入一个char[]) 返回的是ArrayList<char[]>类型。所以set中只有一个值。
解决方案:
知道原因就很简单啦。多加点代码
创建一个Character[]数组作为Arrays.asList()的参数
或者创建个ArrayList<Character> ,然后一个一个add()进去。