Java util之常用数据类型特性盘点
2012-03-07 17:36
411 查看
Java util之常用数据类型特性盘点
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实现
...............●..非线程安全
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实现
...............●..非线程安全
相关文章推荐
- Java util之常用数据类型特性盘点
- Java util之常用数据类型特性盘点
- Java util之常用数据类型特性盘点
- Java util之常用数据类型特性盘点
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(2)-- 变量和常用数据类型
- 认识java.util包中常用数据类型
- 黑马程序员——JAVA基础之基本数据类型包装类和1.5JDK新特性装箱
- 常用数据类型转换(JAVA)
- 共同学习Java源码--常用数据类型--String(一)
- Java笔记九.常用APIの数据类型包装类
- 共同学习Java源码--常用数据类型--String(八)
- 共同学习Java源码--常用数据类型--String(九)
- SpringMVC接收java.util.Date类型数据的2种方法
- 共同学习Java源码--常用数据类型--String(六)
- Java学习--基本数据类型对象Integer的新特性
- 问:java中常用数据类型的拆箱与装箱有什么坑
- mybatis常用jdbcType数据类型以及对应的JavaType
- 共同学习Java源码--常用数据类型--String(十)
- 共同学习Java源码--常用数据类型--String(三)
- JAVA常用的高级数据类型