注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

周响 廊坊师范学院九期信息技术提高班

一个世界有你 一个世界没有你 让两者的不同最大 就是你一生的意义

 
 
 

日志

 
 

集合List、Set、Map总结  

2014-01-28 20:23:48|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

一、概念

集合是源于数学中的术语,集合的一些原理和算法来自于数学中的理论。在java中,集合类是用来存放对象的。对于集合的使用是通过实例化集合类得到集合对象。而集合对象则代表以某一种方式组合到一起的一组对象,对于这组对象的使用是通过引用集合对象来进行的。java的集合类是特别有用的一个工具类,它可以用于存放数量不等的各种对象,并可以实现常用的数据结构,如栈,队列等。

二、集合分类

a、List

实际上有两种List: 一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,它并不是为快速随机访问设计的,而是为了方便插入与删除。 次序是List最重要的特点:它保证维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(这时推荐LinkedList使用),一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和移除元素。

 ArrayList : 由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和移除元素。因为那比LinkedList开销要大很多。

 LinkedList : 对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。LinkedList实现方法类似于链表,所以使用LinkedList可以当作堆栈、队列和双向队列使用。

 b、Set

存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序,具体次序的维护要靠子类的具体实现来完成,例如HashSet、TreeSet等等。

HashSet : 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。

TreeSet : 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。

LinkedHashSet : 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

 c、Map

Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。维护“键值对”的关联性,方便你可以通过“键”查找“值”,而这样的搜索效率要比List的索引搜索效率高。

HashMap : Map基于散列表的实现。插入和查询“键值对”的开销是固定的。适用于在Map中插入、删除和定位元素。

LinkedHashMap : 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。

TreeMap :适用于按自然顺序或自定义顺序遍历键(key)。 TreeMap的特点在于,你得到的结果是经过排序的,它可以返回一个子树。

三、总结

三种集合中,Set集合存储元素无序,不可以重复。  List集合存储元素有序,可以重复,取出来的顺序可能和放入顺序可能不同。而map与他们本质的区别就是map以键值对的形式存储数据。最常用的集合类是 List 和 Map。List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象元素列表。List 适用于按数值索引访问元素的情形。Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,可以将 List 看作是具有数值键的 map。map的一个映射不能包含重复的键,每个键最多只能映射一个值即不是一对一的关系,一个Key对应一个value,但一个value却可以对应多个key。

  评论这张
 
阅读(88)| 评论(19)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017