你读过哪些让你醍醐灌顶的 Java 代码?
1、将 Array 转换成 ArrayList 时出错一些开发者经常用这样的代码将 Array 转换成 ArrayList List list =Arrays.asList(arr);Arrays.asList() 的返回值是一个 ArrayList 类的对象，这个 ArrayList 类是Arrays 类里的一个私有静态类（java.util.Arrays.ArrayList），并不是 java.util.ArrayList类。java.util.Arrays.ArrayList 有 set() / get() / contains()方法，但是并不提供任何添加元素的方法，因此它的长度是固定的。如果你希望得到一个 java.util.ArrayList 类的实例，你应该这么做：ArrayList arrayList = new ArrayList(Arrays.asList(arr));2、遍历 list移除元素时出错下面的代码在迭代时移除了元素：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]这种代码的问题在于，当元素被移除时，list的长度也随之变小了，index 也同时发生了变化。所以，如果你想要在循环中使用 index移除多个元素，它可能不能正常工作。要正确地在遍历时删除元素，应该这么写（代码 2）：ArrayList list = newArrayList(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()。3、用Hashtable 还是用 HashMap一般来说，算法中的 Hashtable 是一种常见的数据结构的名字。但是在 Java 中，这种数据结构的名字却是HashMap，不是 Hashtable。Java 中 Hashtable 和 HashMap 的最重要的区别之一是 Hashtable是同步的（synchronized）。因此大部分时候你不需要用 Hashtable，应该用 HashMap。4、超类和子类的构造函数class Super{ String s; public Super(String s){ this.s = s; }}public class Sub extendSuper{ int x = 200; public Sub(String s){ // 编译错误 } public Sub(){ // 编译错误System.out.println("Sub"); } public static void main(String[] args){ Sub s =new Sub(); }}上述代码会有编译错误，因为没有实现 Super() 构造函数。Java中，如果一个类没有定义构造函数，编译器将会插入一个默认的没有参数的构造函数。但是如果 Super 类已经有了一个构造函数 Super(Strings)，那么编译器就不会插入这个默认的无参数的构造函数。这就是上述代码的遇到的情况。Sub 类的两个构造函数，一个有参数一个没有参数，都会调用 Super类的无参数构造函数。因为编译器会尝试在 Sub 类的两个构造函数里插入 super()，由于 Super 类没有无参数构造函数，所以编译器就报错了。5、用"" 还是用构造函数字符串可以通过两种途径来构造：// 1. 使用双引号String x = "abd";// 2. 使用构造函数String y =new String("abc");下面的代码可以很快地告诉你区别：String a = "abcd";String b ="abcd";System.out.println(a == b); // TrueSystem.out.println(a.equals(b)); //TrueString c = new String("abcd");String d = newString("abcd");System.out.println(c == d); //FalseSystem.out.println(c.equals(d)); // True