java中Map、List与Set比较

来源:互联网 发布:linux nvidia驱动卸载 编辑:程序博客网 时间:2024/05/17 06:42

     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都是线程不安全的

      

1 0
原创粉丝点击