Java 开发中细节 - litonghui/TechBlog GitHub Wiki
(一),Java数组转换为List
Java在转为List 方法有几种方式,对于优缺点说明一下
1, 普通的for循环来代替,优点是操作方式简单易懂,确定是代码杂乱,带来性能方面问题
2, 调用Arrays.asList 方法,操作简单,性能有所提高,需要注意问题是值类型和引用类型转换方式要加以区别
(1),对于值类型
Arrays.asList(new int[] { 1, 2 }) 转换错误,打印结果[[I@5f154718],我们得到一个包含数组中标识每个元素唯一性的地址串的list,而不是包含两个Integer对象的list。
(2),对于引用类型
Arrays.asList(new String[] { "a", "b" }) 正确
Arrays.asList(new Integer[] { 1, 2 }) 正确
(3),对于两种类型无法预知时候,可以用一下方式
Arrays.asList(ArrayUtils.toObject(new int[] { 1, 2 })); 正确结果 [1, 2]
其中ArrayUtils jar 需要下载
(二)遍历collection的同时删除元素
在从任何Collection(例如Map、Set或List)中删除对象时,总要使用Iterator的remove方法
for (JunkInfo info : junkGroupDelete.mChildrenMap.values()){
if(junkGroupOriginal.mChildrenMap.get(info.mPath)!=null){
junkGroupDelete.mChildrenMap.remove(info.mPath);
}
}
如上代码,在遍历Map 删除里面元素,抛出ConcurrentModificationException异常,究其原因是java对集合的并发保护策略,简称fail-fast机制。正确做法如下:
Iterator iterator = junkGroupDelete.mChildrenMap.keySet().iterator();
while (iterator.hasNext()) {
String path = (String) iterator.next();
if(junkGroupOriginal.mChildrenMap.get(path)!=null){
iterator.remove(); //这行代码是关键。
junkGroupDelete.mChildrenMap.remove(path);
}
}