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

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实现 
……………●..非线程安全

相关文章:

  1. 海量数据面试题举例 大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到海量数据的公司经常会问到。 下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定最优,如果你有更好的处理方法,欢迎与我讨论。继续阅读 »...
  2. 新闻:GAE开始支持Java了     4月7日,Google宣布其Google App Engine支持Java语言。此次升级支持原有的所有GAE API,且与Java Servlet API, JDO and JPA, javax.cache, and javax.mail兼容。与此同时,Google还提供了GAE的Eclipse插件。     此前Google App Engine只支持Python。     详情可见这里:Seriously this...
  3. C500K 国外的 Urban Airship 公司的工程师在其官方网志上发文章介绍他们在产品环境中做到 50 万并发客户端,Java + Pure NIO 的实现,最近又有文章介绍针对 Linux Kernel 调优的经验:Linux Kernel Tuning for C500k 。并且指出了"单个 IP 最大并发数量上限为64K"...
  4. PostGreSQL之MVCC代码分析(1):概览 Transaction启动时形成快照就是要记录该Transaction可见的TransactionID,排除不可见的ID。PostGreSQL中每一个版本的数据有两个ID,其中一个是CreationID即插入该数据的TransactionID,一个是ExpiredID,即删除或更新该数据的TransactionID。对一个Transaction可见的数据的ID要满足以下条件: 1.CreationID当前TransactionID或ExpiredID不存在 Transaction启动形成快照的过程: 遍历当前所有活动的Transaction,记录在一个活动Transaction的ID数组中;根据Transaction的先后顺序,选择当前Transaction可见的最小TransactionID,记录在xmin,选择可见的最大TransactionID,记录在xmax中。 PostGreSQL8.5中进行最终的版本选择是在从外存中获取一个页面的数据之后,由一个检验函数(HeapTupleSatisfiesMVCC等一系列函数)检验所有该页面数据的数据对当前Transaction的可见性,如果不可见,则将数据除去,最后返回所有可见数据。继续阅读 »...
  5. ASP.NET的Padding Oracle Attack 如果输入的密文不合法,类库则会抛出异常,这便是一种提示。攻击者可以不断地提供密文,让解密程序给出提示,不断修正,最终得到的所需要的结果。这里的一个关键在于,攻击者所需要的提示仅仅是“解密成功与否”这样一个二元信息,例如它在一个Web程序中可能只是“200 - OK”及“500 - Internal Server Error”这样的表现形式,而不需要其他任何详细信息。继续阅读 »...

发表评论?

2 条评论。

发表评论

无觅相关文章插件,快速提升流量