总结这是我认为Java中的通病。如果您不同意任何部分,请留下您的评论。如果您能提出一些其他常见错误,我将不胜感激。1.将Array转换为ArrayList当需要将Array转换为ArrayList时,开发人员经常这样做:Arrays.asList会返回一个ArrayList,但是要特别注意,这个ArrayList是Arrays类的静态内部类,不是java.util。数组列表类。java.util.Arrays.ArrayList类实现了set、get、contains方法,但是没有实现添加元素的方法(其实可以调用add方法,只是没有具体实现,只是抛出UnsupportedOperationException),所以它的大小也是固定的。为了创建一个真正的java.util.ArrayList,您应该这样做:ArrayList的构造函数可以接收一个Collection类型。并且java.util.Arrays.ArrayList已经实现了这个接口。2.判断一个数组是否包含某个值开发者经常这样做:上面的代码可以正常工作,但是没有必要将其转换为集合集合,将List转换为Set需要额外的时间。其实我们可以简单的使用下面的方法:或者第一种方法可读性更好。3.在循环内删除List中的一个元素考虑如下代码,在迭代过程中删除元素:Resultprint:[b,d]上述方法存在一系列问题,当删除一个元素时,大小为列表递减Small,则原索引指向其他元素。所以如果你想在循环中通过索引删除多个元素,它不会正常工作。您可能知道使用迭代器是在循环中删除元素的正确方法,您可能也知道foreach循环类似于迭代器,但事实并非如此。以下代码:将抛出ConcurrentModificationException。但是,下面的代码是可以的:next方法需要在remove方法之前被调用。在foreach循环中,编译器会在删除元素后调用next方法,从而引发ConcurrentModificationException。4、HashTable和HashMap从算法的角度来看,HashTable是一种数据结构名称。但是在Java中,这种数据结构叫做HashMap。HashTable和HashMap之间的主要区别之一是HashTable是同步的,因此,一般来说,您将使用HashMap而不是Hashtable。5、使用集合原始类型(rawtype)在Java中,原始类型(rawtype)和无界通配符类型很容易混淆。以Set为例,Set是原始类型,Set>是无界通配符类型。请看下面的代码,add方法使用原始类型List作为入参:运行上面的代码会抛出异常:Exceptioninthread"main"java.lang.ClassCastException:java.lang.Integercannotbecastto爪哇。lang.Stringat...与原始类型的集合一起使用是非常危险的,因为它会跳过泛型类型检查并且不安全。此外,Set、Set>和Set
