码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA基础——List、Set和Map大讨论

时间:2014-11-02 16:36:09      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   使用   java   sp   数据   

        今天,我们来讨论一下我们经常使用的集合类,虽然是常用的,但是我相信还是有很多猿们还是再滥用,所以,今天普及一下。

首先看张图片:

bubuko.com,布布扣

        从Collection开始吧,Collection是一个接口,它包含ListSet两个子接口(Quene这里不讨论了),我们今天主要讨论一下:ListSetMap

        List是实现了Collection接口的接口,实现类:LinkedList、ArrayList、Vector

        Set是实现了Collection接口的接口,实现类:HashSet、TreeSet、LinkedSet

        Map是接口,实现类:HashMap、Hashtable、TreeMap、LinkedHashMap、WeakHashMap、IdentityHashMap

 

        Collection和Map接口之间的主要区别在于:Collection中存储了一组对象,而Map存储关键字/值对。

 

        ListSetMap接口的不同:

        List存放的是单个元素,元素是可重复的,可以存放Null元素。

        Set存放的是单个元素,元素不可重复

        Map存放的是键值对,key是不可重复的,value是可重复的;键值都可以是Null,但是key只能有一个Null

 

下面说说这个三个接口的常用实现类:

        List

        Vector:

        基于数组(Array)的List,是线程同步的(sychronized)的

        ArrayList:

        Vector一样是一个基于数组上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。

        LinkedList:

        LinkedList不同于前面两种List,它不是基于数组的,所以不受数组性能的限制。它每一个节点(Node)都包含两方面的内容:

        1.节点本身的数据(data);

        2.下一个节点的信息(nextNode)。

        所以当对LinkedList做添加删除动作的时候就不用像基于数组的ArrayList一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了,这是LinkedList的优势。

        Set

        HashSet

        虽然SetList都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在 HashMap的基础上来实现的,这个就是SetList的根本区别。

        HashSet的存储方式是把HashMap中的Key作为Set的对应存储项,这个也是为什么在Set中不能像在List中一样有重复的项的根本原因,因为HashMapkey是不能有重复的。

         LinkedHashSet

        HashSet的一个子类,一个链表。

        TreeSet

        不同于HashSet的根本就是TreeSet是有序的它是通过SortedMap来实现的。

        Map

        HashMap

        用到了哈希码的算法,以便快速查找一个键和它对应的值。

        TreeMap

        是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,你还可以从TreeMap中指定一个范围以取得其子Map。

         当元素的顺序很重要时选用TreeMap,当元素不必以特定的顺序进行存储时,使用HashMap。

 

        至此,我们给出了常用集合类的优缺点,有的时候,就是这些小小的知识点就把你系统的性能打了很大的折扣。我们在使用上稍稍注意,对系统就是一次拯救!


JAVA基础——List、Set和Map大讨论

标签:style   blog   http   io   ar   使用   java   sp   数据   

原文地址:http://blog.csdn.net/libaoqiang613/article/details/40710265

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!