[Arrays,asList,ArrayList,程序员,String]Java程序员们最常犯的3个集合错误-阿里云开发者社区

开发者社区> dasein58> 正文

[Arrays,asList,ArrayList,程序员,String]Java程序员们最常犯的3个集合错误

简介:   1.将数组转化为列表   将数组转化为一个列表时,程序员们经常这样做:   List list=Arrays.asList(arr);   Arrays.asList() 会返回一个ArrayList对象,ArrayList类是Arrays的一个私有静态类,而不是java.util.ArrayList 类,
+关注继续查看

  1.将数组转化为列表

  将数组转化为一个列表时,程序员们经常这样做:

  List list=Arrays.asList(arr);

  Arrays.asList() 会返回一个ArrayList对象,ArrayList类是Arrays的一个私有静态类,而不是java.util.ArrayList 类,

  java.util.Arrays.ArrayList类有set()、get()、contains()方法,但是没有增加元素的方法,所以它的大 小是固定的,想要创建一个真正的ArrayList类,你应该这样做:

  ArrayList arrayList=new ArrayList(Arrays.asList(arr));

  ArrayList的构造方法可以接受一个集合类型,刚好它也是

  java.util.Arrays.ArrayList的超类。

  2.判断一个数组是否包含一个值

  程序员们经常这样做:

  Set set=new HashSet(Arrays.asList(arr));

  return set.contains(targetValue);

  这段代码起作用,但是没有必要把一个数组转化成列表,转化为列表需要额外的时间。它可以像下面那样简单:

  Arrays.asList(arr).contains(targetValue);

  或者是:

  for (String s : arr) {

  if (s.equals(targetValue)) {

  return true;

  }

  }

  return false;

  很显然第一种方法比第二种更容易读

  3.在一个循环中删除一个列表中的元素

  思考下面这一段在循环中删除多个元素的的代码:

  ArrayList list=new ArrayList(Arrays.asList("a", "b", "c", "d"));

  for (int i=0; i < list.size(); i++) {

  list.remove(i);

  }

  System.out.println(list);

  输出结果是:

  [b,d]

  在这个方法中有一个严重的错误。当一个元素被删除时,列表的大小缩小并且下标变化,所以当你想要在一个循环中用下标删除多个二手手机号买卖平台元素的时候,它并不会正常的生效。

  你也许知道在循环中正确的删除多个元素的方法是使用迭代,并且你知道java中的foreach循环看起来像一个迭代器,但实际上并不是。考虑一下下面的代码:

  ArrayList list=new ArrayList(Arrays.asList("a","b","c","d"));

  for(String s:list){

  if(s.equals("a")){

  list.remove(s);

  }

  }

  它会抛出一个

  ConcurrentModificationException异常。

  相反下面的显示正常:

  ArrayList list=new ArrayList(Arrays.asList("a", "b","c", "d"));

  Iterator iter=list.iterator();

  while (iter.hasNext()) {

  String s=iter.next();

  if (s.equals("a")) {

  iter.remove();

  }

  }

  .next() 必须在.remove()之前调用。在一个foreach循环中,编译器会使.next()在删除元素之后被调用,因此就会抛出

  ConcurrentModificationException异常,你也许希望看一下ArrayList.iterator()的源代码。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
7832 0
《.NET程序员面试秘笈》----面试题13 举例说明索引器的作用
【考点】索引器的理解,this在索引器中的作用。
1495 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
9554 0
1500+面试题+17组成长笔记 | 1024程序员节技术礼包之一
作为一名开发者,1024 程序员日你都干些什么?其实我一点也不关心,我只知道这里有——7份程序员个人成长必读 + 5份技术进阶精选 + 5份业务晋升精选 等你来看,还有——12篇阿里巴巴面试经验分享与 300+面试题 为你保驾护航。这个节过的不亏!
56553 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
11213 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11347 0
Jibx插件使用maven构建Error loading class java.lang.CharSequence错误
Jibx插件使用maven构建Error loading class java.lang.CharSequence错误
8 0
+关注
735
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载