第一次系统的阅读理解Java Collections Framework的源码,已经粗略的学习完了,做个简单的总结。首先把资料放置在第一位,想系统学习的主要原因在工作之余想自学点东西,看了master24 的博文之后,感觉有必要把Java最长用的包学习一下,一来可以熟悉下Collections的API使用,用到再查和熟练使用总是不一样的。再者Collections Framework设计者书籍《Effective Java》荣获Jolt大奖,参考书及源码肯定有很多可学之处,而且相对于Java很多开源程序代码量并不大。
如果想找一个开源的代码来读,之前又没有系统阅读代码的经验,不想读Tomcat、Jobss、Struts、Hibernate、Spring中大块头的经典开源项目,阅读Collection蛮好,代码量小,获得过Jolt大奖,质量无容置疑。
一、集合对比
父类 | 类 | 数据结构 | Java实现 | 优点 | 缺点 |
List | 有序存放、元素可以重复 | ||||
ArrayList | 数组 | Object[] | 索引快 | 插入慢 | |
LinkedList | 双链表 | Entry Inner Class | 插入块 | 索引慢 | |
Vector | 与ArrayList类似 | 线程安全 | |||
Stack | |||||
Set | 无重复元素,不排序。 | ||||
HashSet | HashMap实现 | HashMap 存取 hashMap.put(value, new Object); (如果是值类,通过覆盖hashCode与equals方法确认元素是否重复) | 查找速度快 | ||
TreeSet | NavigableMap 存取 hashMap.put(value, new Object); (可以通过存入的元素实现Comparable接口,比较元素与元素排序操作) | ||||
Map | Entry implements Map.Entry | ||||
HashMap | Hash Table + 单链表 | Entry Inner Class + Entry[] | |||
TreeMap | 红黑二叉树 | ||||
java.util.Hashtable | 线程安全 |