那个谁,今天又写 bug 了,没错,他说的好像就是我。。。。。。
作为 Java 开发,我们在写代码的过程中难免会产生各种奇思妙想的 bug ,有些 bug 就挺让人无奈的,比如说各种空指针异常,在 ArrayList 的迭代中进行删除操作引发异常,数组下标越界异常等。
如果你不小心看到同事的代码出现了我所描述的这些 bug 后,那你就把我这篇文章甩给他!!!你甩给他一篇文章,并让他关注了一波 cxuan,你会收获他在后面像是如获至宝并满眼崇拜大神的目光。
废话不多说,下面进入正题。
错误一:Array 转换成 ArrayList
Array 转换成 ArrayList 还能出错?这是哪个笨。。。。。。
等等,你先别着急说,先来看看是怎么回事。
如果要将数组转换为 ArrayList,我们一般的做法会是这样
List<String> list = Arrays.asList(arr);
Arrays.asList() 将返回一个 ArrayList,它是 Arrays 中的私有静态类,它不是 java.util.ArrayList 类。
Arrays 内部的 ArrayList 只有 set、get、contains 等方法,但是没有能够像是 add 这种能够使其内部结构进行改变的方法,所以 Arrays 内部的 ArrayList 的大小是固定的。
如果要创建一个能够添加元素的 ArrayList ,你可以使用下面这种创建方式:
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr));
因为 ArrayList 的构造方法是可以接收一个 Collection 集合的,所以这种创建方式是可行的。
错误二:检查数组是否包含某个值
检查数组中是否包含某个值,部分程序员经常会这么做:
Set<String> set = new HashSet<String>(Arrays.asList(arr));
return set.contains(targetValue);
这段代码虽然没错,但是有额外的性能损耗,正常情况下,不用将其再转换为 set,直接这么做就好了:
return Arrays.asList(arr).contains(targetValue);
或者使用下面这种方式(穷举法,循环判断)
for(String s: arr){
if(s.equals(targetValue))
return true;
}
return fa