java.util就相当于c++的STL,是Java的一个非常重要的包,有很多常用的数据类型,不同数据类型有不同的用途,而有些数据类似乎很相似,怎样选择应用,就需要对它们进行辨析。
下面列出了这些数据类型的特点,根据这些特点,就可以有针对性的选用
* 缩进的层次结构,就是implement或extend的层次关系
* 每个接口或类都具备其所有上层接口、类的特性
Collection
……..|——–List
……..|……….|———-ArrayList
……..|……….|———-Vector
……..|……….|………….|—–Stack
……..|……….|———-LinkedList
……..|——–Set
……………….|———-HashSet.
……………….|………….|—–LinkedHashSet
……………….|———-SortedSet
……………………………|—–TreeSet
Iterator
…..|——-ListIterator
Map
…..|——Hashtable
…..|……….|——Properties
…..|——HashMap
…..|……….|——LinkedHashMap
…..|——WeakHashMap
…..|——SortedMap
…………….|——TreeMap
Collection.
●..实现该接口及其子接口的所有类都可应用clone()方法,并是序列化类.
…..List.
…..●..可随机访问包含的元素
…..●..元素是有序的
…..●..可在任意位置增、删元素
…..●..不管访问多少次,元素位置不变
…..●..允许重复元素
…..●..用Iterator实现单向遍历,也可用ListIterator实现双向遍历
……….ArrayList
……….●..用数组作为根本的数据结构来实现List
……….●..元素顺序存储
……….●..新增元素改变List大小时,内部会新建一个数组,在将添加元素前将所有数据拷贝到新数组中
……….●..随机访问很快,删除非头尾元素慢,新增元素慢而且费资源
……….●..较适用于无频繁增删的情况
……….●..比数组效率低,如果不是需要可变数组,可考虑使用数组
……….●..非线程安全
.
……….Vector.
……….●..另一种ArrayList,具备ArrayList的特性
……….●..所有方法都是线程安全的(双刃剑,和ArrayList的主要区别)
……….●..比ArrayList效率低
……………Stack
……………●..LIFO的数据结构
……….LinkedList.
……….●..链接对象数据结构(类似链表)
……….●..随机访问很慢,增删操作很快,不耗费多余资源
……….●..非线程安全
…..Set.
…..●..不允许重复元素,可以有一个空元素
…..●..不可随机访问包含的元素
…..●..只能用Iterator实现单向遍历
……….HashSet
……….●..用HashMap作为根本数据结构来实现Set
……….●..元素是无序的
……….●..迭代访问元素的顺序和加入的顺序不同
……….●..多次迭代访问,元素的顺序可能不同
……….●..非线程安全
……………LinkedHashSet
……………●..基于HashMap和链表的Set实现
……………●..迭代访问元素的顺序和加入的顺序相同
……………●..多次迭代访问,元素的顺序不便
……………●..因此可说这是一种有序的数据结构
……………●..性能比HashSet差
……………●..非线程安全
……….SortedSet
……….●..加入SortedSet的所有元素必须实现Comparable接口
……….●..元素是有序的
……………TreeSet.
……………●..基于TreeMap实现的SortedSet
……………●..排序后按升序排列元素
……………●..非线程安全
-----------------------------------
Iterator..
●..对Set、List进行单向遍历的迭代器
……….ListIterator.
……….●..对List进行双向遍历的迭代器
-----------------------------------
Map
●..键值对,键和值一一对应
●..不允许重复的键.
…..Hashtable.
…..●..用作键的对象必须实现了hashcode()、equals()方法,也就是说只有Object及其子类可用作键
…..●..键、值都不能是空对象
…..●..多次访问,映射元素的顺序相同
…..●..线程安全的
……….Properties
……….●..键和值都是字符串
…..HashMap
…..●..键和值都可以是空对象
…..●..不保证映射的顺序
…..●..多次访问,映射元素的顺序可能不同
…..●..非线程安全
……………LinkedHashMap
……………●..多次访问,映射元素的顺序是相同的
……………●..性能比HashMap差
…..WeakHashMap..
…..●..当某个键不再正常使用时,垃圾收集器会移除它,即便有映射关系存在
…..●..非线程安全
…..SortedMap.
…..●..键按升序排列
…..●..所有键都必须实现.Comparable.接口.
……………TreeMap.
……………●..基于红黑树的SortedMap实现
……………●..非线程安全