- java.util
- 容器用于管理对象的生命周期,对象与对象之间的关系;容器类中存放的都是对象的引用,而非对象本身。
- 容器vs数组 :
- 数组时Java的内置数据类型,是一个线性序列,可以快速访问。
- 一个数组创建后,其容量就固定了,并在其生命周期内不变。
- Java在运行时会对数组做越界检查。
- 与容器相比,Java在编译时会做类型检查,防止插入错误类型的对象。
- 数组效率高于容器类。
- 数组可以持有基本数据类型。
4. JAVA里面提供的容器处理对象的时候就好像这些这些对象都没有自己的类型一样,容器将它所含的元素都看成是JAVA中根类Object类型的,这样我们只需创建一种容器就能把所有的类型的对象全部放进去。
5. 一张图很好的说明了Java的集合框架结构
![](http://www.yesky.com/image20010518/92084.bmp)
集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。
抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。
实现类:8个实现类(实线表示),对接口的具体实现。
抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。
实现类:8个实现类(实线表示),对接口的具体实现。
常用容器类使用注意:
涉及到堆栈,队列等操作,用List
需要快速插入,删除元素,使用LinkedList
需要快速随机访问元素 使用ArrayList 需要快速随机访问元素,使用ArrayList
Iterator是Java迭代器最简单实现,只能单向移动
ArrayList和HashMap是异步的,不是线程安全的。
Vector和HashTable是同步的,是线程安全 Vector和HashTable是同步的,是线程安全的
因为同步需要花费机器时间 所以V 和 因为同步需要花费机器时间,所以Vector和HashTable的执行效率要低于 ArrayList和HashMap。
ArrayList: 元素单个,效率高,多用于查询
Vector: 元素单个,线程安全,多用于查询
LinkedList:元素单个 多用于插入和删除 LinkedList:元素单个,多用于插入和删除
HashMap: 元素成对,元素可为空
HashTable: 元素成对,线程安全,元素不可为空
要根据不同问题的需要选择合适的容器,以此来达到功能的要求和效率的最优尽量返回接口而非实际的类型
单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步类 其效率较高 虑非同步类,其效率较高
多个线程可能同时操作一个类,应使用同步类
对哈希表的操作,作为key的对象要正确复写equals和hashCode方法