千锋教育-做有情怀、有良心、有品质的IT职业教育机构
位置:首页 > 行业动态

长沙Java培训课程教你规避5大常见错误

时间:2018-03-07 15:37:05  |  来源:千锋长沙培训机构  |  作者:千锋  

   人非圣贤,孰能无过。都说Java语言是一门简单的编程语言,基于C++演化而来,剔除了很多C++中的复杂特性,但这并不能确保Java程序员不会犯错。那么对于广大的Java程序员来说,常犯的5个错误是什么呢?经常被评为长沙java培训课程的千锋老师在本文中总结出了5个Java程序员得常见错误,希望大家在日后得编程过程中能够避免。

  1. 数组转ArrayList

  为了实现把一个数组转换成一个ArrayList,很多Java程序员会使用如下的代码:

图片1.jpg

  Arrays.asList确实会返回一个ArrayList对象,但是该类是Arrays类 中一个私有静态内部类,而不是常见的java.util.ArrayList类。这个java.util.Arrays.ArrayList类具有 set(),get(),contains()等方法,但是不具有任何添加或移除元素的任何方法。因为该类的大小(size)是固定的。为了创建出一个真正的ArrayList,代码应该如下所示:

图片2.jpg

  我们知道,ArrayList的构造方法可以接受一个Collection类型的对象,而我们的 java.util.Arrays.ArrayList正好也是它的一个子类。实际上,加的代码示例是:

图片3.jpg

  2. 数组是否包含特定值

  为了检查数组中是否包含某个特定值,很多Java程序员会使用如下的代码:

图片4.jpg

  就功能而言,该代码是正确无误的,但在数组转List,List再转Set的过程中消耗了大量的性能。我们可以优化成如下形式:

  或者,进一步优化成如下所示的代码:

  3. 在迭代时移除List中的元素

  首先,看一下在迭代过程中移除List中元素的代码:

  这个示例代码的输出结果是:

  这个示例代码中存在一个非常严重的错误。当一个元素被移除时,该List的大小(size)就会缩减,同时也改变了索引的指向。所以,在迭代的过程中使用索引,将无法从List中正确地删除多个指定的元素。

  你可能知道解决这个错误的方式之一是使用迭代器(iterator)。而且,你可能认为Java中的foreach语句与迭代器(iterator)是非常相似的,但实际情况并不是这样。我们考虑一下如下的示例代码:

  这个示例代码会抛出来一个Concurrent Modification Exception。我们应该修改成如下所示:

  next()方法必须在remove()方法之前被调用。在 foreach循环中,编译器使得 remove()方法先于next()方法被调用,这就导致了ConcurrentModificationException 异常。具体细节可以查看ArrayList.iterator()的源码。

  4. Hashtable vs HashMap

  学习过数据结构的读者都知道一种非常重要的数据结构叫做哈希表。在Java中,对应哈希表的的类是HashMap而不是Hashtable。HashMap与Hashtable之间的核心区别就是:

  HashMap是非同步的,Hashtable是同步的。

  5. 在Collection中使用原始类型

  在Java中,很容易把原始类型与无限通配类型混淆。我们举个Set相关的例子:Set就是原始类型;Set就是无限通配类型。我们看一个使用在List中使用原始类型的例子:

  这个示例代码会抛出来一个异常:

  在Collection使用原始类型是具有很多的类型错误风险的,因为原始类型没有静态类型检查。实际上,Set、Set和Set之间具有非常大的差异。

上一篇:学习Java如何才能做到从入门到精通?
下一篇:长沙Java培训分享:Java常见面试题答题经验

课程咨询

千锋开发者联盟QQ群

JavaEE学习交流群:343013298

HTML5学习技术交流群: 314548237

UI技术学习交流群:159532533

PHP学习交流群:517739045

  • 深圳科技园校区:深圳市南山区科苑南路高新技术产业园R3-B栋5层
    深圳大学城校区:深圳市南山区留仙大道1201号大学城创客小镇16栋2楼、3楼
    咨询电话:0755-86681178/9-801
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、好程序员特训营
  • 北京天丰利校区:北京市海淀区宝盛北里西区28号天丰利商城4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术广场服务楼2层、南区服务楼2层
    咨询电话:400-654-7778 010-82790226/7-801
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训、好程序员特训营
  • 上海地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-627-7899 021-65025129-601
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、好程序员特训营
  • 郑州地址:郑州市金水区纬五路21号河南教育综合楼6楼、7楼
    咨询电话:0371-55911950 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训
  • 广州地址:广州市天河区元岗路310号智汇park创意园E座5层
    咨询电话:020-22119207 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 大连地址:大连市高新园区软件园路2号B8座
    咨询电话:0411-39026086 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 武汉地址:武汉市东新区光谷大道77号金融港B26栋9楼
    咨询电话:027-59905909 027-59905908 027-59905902
    面授课程:iOS课程培训、Android课程培训
  • 成都地址:成都市一环路西二段17号四川旅游青羊校区内
    咨询电话:028-83178771 028-61967740
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训
  • 西安地址:西安市二环南路西段60号永安大厦4层
    咨询电话:029-85260160 029-85261030 029-85260960
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 杭州地址:浙江省杭州市江干区九堡旺田书画城A座4层
    咨询电话:0571-86893632 010-82790226/7-801
    面授课程:iOS课程培训、Android课程培训
  • 青岛校区地址:青岛市市南区金坛路17号青岛职业技术南校区实训楼A4层
    咨询电话:0532-80910752/3 010-82790226/7-801
    面授课程:iOS课程培训、Android课程培训
  • 千锋学员专属客户端
    “锋向标”扫描下载

  • 千锋教育微信号
    扫描加好友

关闭