java集合相关_java集合相关

集合类存放于java.util包中

首先需要说的是Collection

Collection是集合的基本接口,List、Set、Queue就继承于Collection接口(map没有)。

java的集合主要有三种:Set,List和Map

Set(集)

Set具有与Collection完全一样的接口,因此没有任何额外的功能。实际上Set就是Collection,只是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为负责)

Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。

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

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

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

List(列表)

List : 次序是List最重要的特点:它保证维护元素特定的顺序,即list中元素是有序的。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(这只推荐LinkedList使用,因为其是链表的存储结构)一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和移除元素。Java List一共三个实现类:分别是ArrayList、Vector和LinkedList。

ArrayList : 由数组实现的List(顺序存储,即在存储空间内开辟一块连续的空间用于存储,值得一提的是如果存储空间满了则会自动增加50%+1的空间)。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢(由于顺序存储的缘故,如果假设有10个元素,需要删掉其中的第2个,则3,4,5...一直到第10个元素的位置都需要往前移动,插入同理)。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和移除元素。因为那比LinkedList开销要大很多。

LinkedList : 链表存储结构,向List中间插入与删除的开销并不大(因为本身的存储空间并不连续,元素和下一个元素之间都是通过指针来连接)。随机访问则相对较慢(因为访问时需要移动指针,而ArrayList则直接访问某一固定位置即可),还具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法 (没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

Vector : 也是由数组实现的List,大体上与ArrayList无异,Vector的主要优点即线程安全,一个Vector中同一时间只能有一个线程对它进行写操作,但是由于线程的同步需要消耗一定资源,所以速度上自然比不上ArrayList

Map(映射)

Map与Collection在集合框架中属并列存在(即前文提到的继承Collection的不包括Map)

Map存储的是键值对,而之前的List和Set存储的只是值,当然,也可以说他们在集合中的序号看做他们的键,不过本质上是不同的。Map存储元素使用put方法,Collection使用add方法,Map集合取出元素时先转成Set集合,再通过迭代获取元素,于Collection也有不同。另外由于Map集合中使用键值对进行储存,所以键必须是唯一的,即任意两个键不能相同,但是值可以是相同的,即任意两个不同键对应的值可以相同。Map

这里要先提一下Hash表的概念了:Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组、链表以及二叉排序树等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找

Hashtable : 底层是哈希表数据结构,线程是同步的(即线程安全),不可以存入null键,null值。效率较低,被HashMap 替代。

HashMap : 底层是哈希表数据结构,线程是不同步的,可以存入null键,null值。要保证键的唯一性,需要覆盖hashCode方法,和equals方法。

LinkedHashMap : 该子类基于哈希表又融入了链表,提高插入和删除元素的效率,当然访问时效率应该也会有所下降。

TreeMap : 底层是二叉树数据结构。可以对map集合中的键进行排序。需要使用Comparable或者Comparator进行比较排序,当然也可以定义他们实现特殊的排序方法。

参考博文:

原文:http://www.cnblogs.com/Qunter/p/7494576.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值