集合类的toArray方法坑
集合类的toArray()方法相信大家都不陌生,它的作用是将集合转换成数组。但是这个方法有一个弊端,当toArray()方法使用不当时会产生ClassCastException(类转换异常)!
public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("张三"); list.add("李四"); list.add("王五"); // 下面这行代码就会产生类转换异常。 String[] strArray = (String[]) list.toArray(); for (String item : strArray) { System.out.println(item); } }
//报错原因为list.toArray()返回的是Object类型,强制转换的时候发生ClassCastException
解决方案:toArray()方法的重载方法toArray(T[] a)。
public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("张三"); list.add("李四"); list.add("王五"); // 传入一个String类型的数组。 String[] strArray = list.toArray(new String[0]); for (String item : strArray) { System.out.println(item); } }
注意事项:
注意入参数组空间大小的设置: 1、数组空间等于0时,将会动态的创建和集合size相同空间大小的数组,性能是最好的。 2、数组空间大于0但是小于size时,会重新创建大小等于集合size的数组,此时会增加GC的负担。 3、数组空间等于集合的size时,在普通情况下是没问题的,但是在高并发情况下,数组创建完成后,集合的size变大,此时影响跟第二条相同。 4、数组空间大于集合的size时,一方面会造成空间浪费,另一方面会在使用数组时产生空指针的异常。因为多出来的空间会存入null。
既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去!!!!!!!!!! !!! ! !! !
个人公众号《后端技术开发之路》,欢迎您关注!
如果您觉得我写还不过,请打赏下在下吧!【高木子】!