java的集合类(MapList与Set比较)
Posted wangcp-2014
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的集合类(MapList与Set比较)相关的知识,希望对你有一定的参考价值。
java中集合包括三大类,它们分别是Map、List和Map。
我们为什么要设定不同的集合类型,是为了放置不同的数据,而且不同类型用在不同的场合。这三个类放在何处呢,它们放在java.util包中,Set、List和Map都是接口,它们有各自的实现类。Set的主要实现类:HashSet和TreeSet,List的主要实现类是ArrayList,而Map主要实现类是HashMap和TreeMap。
Set集合:
继承于Collection接口。类似一个罐子,把一个对象添加到set集合时,Set集合无法确定添加的顺序,故Set集合中要求不能添加重复的数据(否则系统将无法准确找到该元素)。
HashSet:是Set集合接口的典型的实现,我们通常都会使用这个实现类,HashSet接口按照Hash算法来进行查找和存取,具有很好的效率,它具有以下特点:
特点:
1、不能保证元素按顺序排列
2、HashSet不是同步的,如果多个线程访问同一个HashSet,如果多个线程同时修改HashSet的
值,必须程序员去保证同步。
3、集合元素值可以是null
TreeSet:实现SortedSet,顾名思义TreeSet可以保证元素处于排序状态,采用红黑树算法来存储集合元素。(红黑树算法是一种二叉查找树) TreeSet除了具有HashSet具有的方法外,还提供了排序的方法--Comparator()来实现对集合中元素进行排序。TreeSet默认支持两种排序方法:自然排序和定制排序。自然排序会调用集合中比较方法--compareTo(Object obj)方法比较元素之间的大小关系,然后将集合按照升序排列。而定制排序其实就是可以实现自己私人定制,我们可以根据自己的需要来进行降序排列。
上面是两个主要应用的Set集合的实现类,HashSet还有一个子类:LinkedHashSet,它也是根据元素的HashCode来查找元素的存储位置,但它使用链表来维护元素的次序,由于链表的链接作用,这样当我们从集合中查找数据时,看起来是按照插入的顺序来保存的,也就是说我们需要遍历整个集合时,会按照添加的顺序来访问集合中元素。
Set实现类的比较
1、HashSet性能高于TreeSet(特别在添加、查找元素操作时),因为TreeSet需要额外的算法来维护次序
2、对于普通的插入、删除HashSet高于LinkedHashSet,这是由于维护链表需要额外的开销,但正是因为有了链表,使得LinkedHashSet遍历速度要快于HashSet
3、HashSet、TreeSet和LinkedSet都是线程不安全的
以上是关于java的集合类(MapList与Set比较)的主要内容,如果未能解决你的问题,请参考以下文章
Java Review (二十集合----- Set 集合)