集合框架

集合框架

Collection接口下有三个比较常见的子接口:List,set和Map

List

List这个借口有三个主要实现类:
1.ArrayList
2.LinkedList
3.Vector

ArrayList

ArrayList是基于动态数组的实现,因为其在主体还是数组,所以其在元素查找时很方便,只用通过索引即可快速找到。但是在元素删除或者插入时由于在改动索引后面的元素都要在整体改动,所以在此方面会比较麻烦。ArrayList在实现时并没有考虑线程同步,所以其在多线程并发时并不能保证数据的安全性。另外有一点是,ArrayList在容量扩充时是自动增长为原来的1.5倍。

LinkedList

链表。就像名字一样,其元素可以说是“环环相扣”的。其元素之间通过首尾指针相连,因此在插入、修改、删除等操作时就显得极为简单,只用改动指针的指向即可。而其在查询方面,由于每次都要从头开始遍历就不那么好用了,相比ArrayList可以说是各有优点吧。

Vector

Vector在实现上和ArrayList相差不多,都是基于动态数组的实现。区别在于Vector是在JDK1.0中就已经出现的动态数组类,而且其在实现时已经保证了多线程的安全性,多线程并发时其就比ArrayList安全不少,但同时效率也会低一些。另外Vector在进行数组扩充的时候会扩充为原先的两倍不同于ArrayList的1.5倍。

Set

Set是一个无序的集合,其存储元素的时候并不是按照添加顺序存储的,实际上的存储顺序和使用的具体实现类有关。而同时因为其是无序存储,并不像List一样可以通过索引获取元素,所以只能通过迭代器itrator进行迭代。另外有一点比较重要,Set中是不允许重复元素出现的,后出现的元素会覆盖掉之前的。
Set集合下有两个常见的实现类:
1.HashSet
2.TreeSet

HashSet

其元素根据Hash表进行排序,允许有null值存在,但是还是不允许相同元素。

TreeSet

这个元素排序就需要自己定义了,在你需要排序的类中要实现Comparable接口或者简单点直接在创建TreeSet对象时提供Comparator比较器,但是和HashSet不同的是,TreeSet不允许出现null值。

Map

Map内部存储元素时采用的是键值对结构,即一个元素对应一个键值,而且键值(key)不允许重复。
Map有以下三个常见实现类:
1.HashMap
2.TreeMap
3.Hashtable

HashMap

内部排序和前面的HashSet一样基于Hash表排序(根据名字就能联想到),其内部允许空键值和重复的元素值出现,但是重复的键值还是不允许的。HashMap是一种线程不安全的实现,和前面谈到的ArrayList一样并不能 保证数据的安全性。

Hashtable

Hashtable和vector一样在JDK1.0版本就已经存在,当时是继承自Dictionary类,JDK1.2版本后改为实现Map接口。其不允许出现空键值,而该类实现时线程同步的,多线程并发时相对HashMap更为安全。

TreeMap

按照惯例根据名字来看很容易联想到前面的TreeSet,实际上也有一定的相同点,比如排序方面,TreeMap也是要在需要排序的类中实现Comparable接口或者在TreeMap定义时指定Comparator比较器,其他就和TreeSet没什么关系了。
TreeMap中的键必须是相同类型的数据,并且不允许空元素,并且其也是线程不安全的实现。

Collections类

Collections类是是一个用于对集合进行一些常规操作的工具类(排序,查找,反转等),内部包含的都是静态方法。

这里Collection和Collections名字过于相似,因此想强调一下:

Collection一个接口,其主要用的是其下的几个子接口用来存储数据的实现类。
Collections则是用来处理集合的相关工具类,其中封装了一些比较实用的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值