Java易犯错误(转)
来源:互联网 发布:电信云计算发展措施 编辑:程序博客网 时间:2024/06/04 20:34
1、将数组转换为数组列表
错误:List<String> list =Arrays.asList(arr);
正确:ArrayList<String> list =new ArrayList<String>(Arrays.asList(arr));
解释:Arrays.asList()方法返回一个受指定数组支持的固定大小的列表,这不是java.util.ArrayList类,java.util.Arrays.ArrayList类有set()、 get()、 contains()方法,但是没有任何加元素的方法,因此它的大小是固定的。ArrayList的构造函数能够接受一个集合类型,这也是java.util.Arrays.ArrayList的超级类型。
2、检查一个数组包含一个值
最好方法:Arrays.asList(arr).contains(targetValue);//首先把数组转换为ArrayList,然后调用contains()方法。
其次方法:for(String s:arr){
if(targetValue.equals(s)){
return true;
}
}
return false;
不好方法:HashSet<String> set =new HashSet(Arrays.asList(arr));//首先将数组转换为ArrayList, //然后再转换为HashSet
return set.contains(targetValue);
解释:最后一种方法代码可以工作,但是没有必要首先转换列表到Set,转换一个列表到一个Set需要额外的时间。
3、在一个循环中从一个列表里删除一个元素
错误做法:ArrayList<String> list =new ArrayList<String>(Arrays.asList("a","b","c","d"));
for(int i=0;i<list.size();i++){
list.remove(i);
}
解释:这种做法最后的结果是list中还有[b,d],因为当一个元素被删除时,列表收缩大小并且指针改变了,所以想要在循环内利用指针删除多个元素是无法正常进行的。
错误做法:ArrayList<String> list =new ArrayList<String>(Arrays.asList("a","b","c","d"));
for(String s:list){
if(s.equals("a")){
list.remove(s);
}
}
这种做法会报ConcurrentModificationException异常。
正确做法:
next()必须在.remove()之前被调用。在foreach循环中,编译器将在删除元素操作之后调用.next(),这也是导致ConcurrentModificationException异常的原因。
4、ArrayList VS LinkedList
如果你不知道ArrayList和LinkedList之间的区别时,你可能会经常的选用ArrayList,因为它看起来看熟悉。然而它们之间有巨大的性能不同。简单的来说,如果有大量的添加/删除操作,并且没有很多的随机存取操作时,LinkedList应该是你的首选。
- Java易犯错误(转)
- Java基础语法易犯错误(1)
- Java基础语法易犯错误(2)
- Java易犯错误
- Java开发者易犯错误
- Java编程易犯错误
- JAVA 十个低级易犯错误
- Java开发者易犯错误Top10
- Java开发者易犯错误Top10
- Java开发者易犯错误Top10
- Java开发者易犯错误Top10
- Java开发者易犯错误Top10
- Java开发者易犯错误Top10
- Java开发者易犯错误Top10
- Java开发者易犯错误Top10
- Java开发者易犯错误Top10
- Java中新手易犯错误
- Java开发者易犯错误Top10
- Jedis使用示例
- 【算法】LRU CACHE
- C语言字符串操作常用库函数
- PHP向客户端响应JSON格式数据
- Apache Camel中的recipientList和routingSlip的区别?
- Java易犯错误(转)
- 微信支付
- ios开发通知与消息机制
- Socket连接与HTTP连接
- [leetcode 274 275]H-Index I II
- 第7周工作周报
- SCHED_DEALINE调度类分析(二)
- shop++ CriteriaQuery 数据库查询语句
- UIApplication深入研究