Java开拓常犯的10个错误,打死都不要犯
副问题[/!--empirenews.page--]
阅读目次
这个列表总结了10个Java开拓职员最常犯的错误。 1、Array转ArrayList 当必要把Array转成ArrayList的时辰,开拓职员常常这样做:
Arrays.asList()会返回一个ArrayList,可是要出格留意,这个ArrayList是Arrays类的静态内部类,并不是java.util.ArrayList类。 java.util.Arrays.ArrayList类实现了set(), get(),contains()要领,可是并没有实现增进元素的要领(究竟上是可以挪用add要领,可是没有详细实现,仅仅抛出UnsupportedOperationException非常),因此它的巨细也是牢靠稳固的。为了建设一个真正的java.util.ArrayList,你应该这样做:
ArrayList的结构要领可以吸取一个Collection范例,而java.util.Arrays.ArrayList已经实现了该接口。 2、判定一个数组是否包括某个值 开拓职员常常这样做:
以上代码可以正常事变,可是没有须要将其转换成set荟萃,将一个List转成Set必要特另外时刻,着实我们可以简朴的行使如下要领即可:
可能
第一种要领可读性更强。 3、在轮回内部删除List中的一个元素 思量如下代码,在迭代时代删除元素: ![]() 功效打印:[b, d] 在上面这个要领中有一系列的题目,当一个元素被删除的时辰,list巨细减小,然后原先索引指向了其余元素。以是假如你想在轮回里通过索引来删除多个元素,将不会正确事变。 你大概知道行使迭代器是在轮回里删除元素的正确方法,或者你也知道foreach轮回跟迭代器很相同,但究竟环境却不是这样,如下代码: ![]() 将抛出ConcurrentModificationException非常。 然而接下来的代码却是OK的: ![]() next()要领必要在remove()要领之前被挪用,在foreach轮回里,编译器会在删除元素操纵化挪用next要领,这导致了ConcurrentModificationException非常。更多具体信息,可以查察ArrayList.iterator()的源码。 4、HashTable与HashMap 从算法的角度来讲,HashTable是一种数据布局名称。可是在Java中,这种数据布局叫做HashMap。 HashTable与HashMap的一个首要的区别是HashTable是同步的,以是,凡是来说,你会行使HashMap,而不是Hashtable。保举:HashMap 和 Hashtable 的 6 个区别! 5、行使荟萃原始范例(raw type) 在Java中,原始范例(raw type)和无界通配符范例很轻易让人夹杂。举个Set的例子,Set是原始范例,而Set是无界通配符范例。 请看如下代码,add要领行使了一个原始范例的List作为入参: ![]() 运行以上代码将会抛出非常: Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at ... 行使原始范例荟萃很是伤害,由于它跳过了泛型范例搜查,是不安详的。其它,Set, Set, 和Set这三个有很大的差异。 6、会见级别 开拓职员常常行使public修饰类字段,固然这很轻易让别人直接通过引用获取该字段的值,但这是一个欠好的计划。按照履历,应该尽也许的低竣工员属性的会见级别。 7、ArrayList和LinkedList 为什么开拓职员常常行使ArrayList和LinkedList,却不知道他们之间的区别,由于它们看起来很像。然而它们之间有着庞大的机能差别。简朴的说,假若有大量的增进删除操纵而且没有许多的随机遇见元素的操纵,应该首选LinkedList。 8、可变与不行变 不行变工具有许多利益,如简朴、安详等。可是对付每个差异的值都必要一个单独的工具,太多的工具会引起大量垃圾接纳,因此在选择可变与不行变的时辰,必要有一个均衡。保举:Java 中的 String 真的是不行变的吗? 凡是,可变工具用于停止发生大量的中间工具,一个经典的例子是大量字符串的拼接。假如你行使一个不行变工具,将会顿时发生大量切合垃圾接纳尺度的工具,这挥霍了CPU大量的时刻和精神。行使可变工具是正确的办理方案(StringBuilder); ![]() (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |