`
tianxinet
  • 浏览: 263104 次
  • 性别: Icon_minigender_1
  • 来自: Net
社区版块
存档分类
最新评论

Java util之常用数据类型特性盘点

阅读更多
在做应用性能优化时,常发现因为数据类型使用不当导致的性能、资源浪费问题,甚至老手也常发生此类失误,因此想盘点一下,搞一个类似叫做"quick page"的东东。

欢迎修订增补。


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实现
...............●..非线程安全
分享到:
评论
7 楼 haihai 2007-04-08  
不错,收藏,以备查用
6 楼 ll_2046 2007-04-04  
elathen 写道
引用
学、思、行,3个进阶,循环往复


这个说的很好。


确实说的好!以前我学习总是不“行”,总感觉看了好几遍,等到用的时候还是记不住,所以“学、思”之后“行”很重要!
5 楼 tianxinet 2006-11-11  
刚刚在网上搜索和技术无关的东东,居然通过某人blog上的链接回到了自己的这个贴子。

当初整理这个贴子,基本是靠经验记忆,基于jdk1.4前版本。现在jdk5、6已发布一段时间,略略看了一下,jdk1.5中已有新接口:Formattable、Queue(看了介绍,这两个东东挺有用),新类:EnumMap、EnumSet、UUID等,比之先前版本丰富了一些。我现在不用1.5以上版本,有空的话在自己的机器上安装一个测试一下。希望有实际使用经验的朋友能补上或修订新内容。
4 楼 elathen 2006-11-09  
引用
学、思、行,3个进阶,循环往复


这个说的很好。
3 楼 tianxinet 2006-09-03  
现在的人,言必称经典
think in java确实也称得上经典,不过它是一个软件教师写的“教程”,而不是“实作手册”,我们需要在“思想”的基础上更进一步,搞些类似“quick page”之类的东东,有些时候很有用。

学、思、行,3个进阶,循环往复

欢迎修订增补
2 楼 刑天战士 2006-09-01  
TIJ这章是经典,还有讲线程的那章
1 楼 adamzhao 2006-08-31  
关于这个,在Think in Java的第十一章有一个图不错。

相关推荐

    java util工具类3

    java util工具类2java util工具类2java util工具类2java util工具类2

    Java常用工具类UtilClass

    Java常用工具类UtilClass,包括StringUtil、FileUtil、ConnectDB、DateUtil、TimeUtil一些可能用到的工具,实现某些特定的功能,,

    java util工具类1

    java util工具类1java util工具类1

    java util工具类4

    java util工具类4java util工具类4java util工具类4java util工具类4ssss

    用java.util.zip包现数据压缩与解压

    本文通过对数据压缩算法的简要介绍,然后以详细的示例演示了利用java.util.zip包实现数据的压缩与解压,并扩展到在网络传输方面如何应用java.util.zip包现数据压缩与解压

    java常用util工具类

    Stringutil FileUtil MD5 JsonUtil

    java常用工具类封装util.rar

    java常用工具类封装util.rarjava常用工具类封装util.rarjava常用工具类封装util.rarjava常用工具类封装util.rar

    JavaUtil.rar

    java自己封装的工具类,用于节省时间,提高效率,java常用工具类封装util.rar 一个项目不可能没有工具类,工具类的初衷是良好的,代码重用,但到了后面工具类越来越乱,有些项目工具类有几十个,看的眼花缭乱,...

    Java常用Util类

    这是我自己整理的一些Java中常用的工具类,是一个Web项目可以直接导入.在里面有详细的介绍 有部分是网上的资源,在这里整理给大家希望对大家有用(这个工具类还会不断的更新)

    java工具类 java开发助手 java util

    java工具类 java开发助手 java util

    Java开发常用Util工具类

    字符串工具类/数据类型转换类/集合工具类/数组工具类/Properties文件操作类/常用流操作工具类/编码工具类/Json工具类/日期工具类/下载文件工具类/解压ZIP工具类/文件编码转码

    Java.util随记.doc

    Java.util包常用接口

    java.util包

    java.util包

    javaUtil.jar

    javaUtil.jar

    java并发工具包 java.util.concurrent中文版用户指南pdf

    1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...

    java util工具类2

    java util工具类2java util工具类2java util工具类2

    JAVA util工具包

    JAVA开发Util工具包,小集合,多平带扩展。JAVA开发Util工具包,小集合,多平带扩展

    java-util-iterator.pdf java-util-iterator.pdf

    java-util-iterator.pdfjava-util-iterator.pdfjava-util-iterator.pdf

    Java项目开发常用工具包util

    Java项目开发常用工具包,其中主要包括:Assert.java BufferedImageLuminanceSource.java CipherUtil.java ClientConst.java CodeUtil.java ComputeUtil.java DataUtils.java DateUtils.java Digests.java Encodes....

    java util工具类

    java util帮助类,包括日期工具类、字符串处理工具类、上传工具类、http请求工具类、hibernate工具类、MD5工具类、分页工具类等。 CodeStringUtil.java CreateFileUtil.java DateUtil.java FileCopy.java ...

Global site tag (gtag.js) - Google Analytics