集合大聚会

来源:互联网 发布:java高级工程师好考吗 编辑:程序博客网 时间:2024/05/16 19:35

    集合存放的是对象的引用,而非对象本身,我们称集合中的对象就是集合中的引用,简单的说,集合中存放的是引用类型的数据。集合分为两种类型,单列集合和双列集合,即Collection集合和Map集合。


【单列集合】

    Collection是单列集合的根接口,它的实现类有List和Set,虽然说list和Set也是属于Conllection,但是他们也各有千秋,下面我们一起来对比来他们的特点吧。

【List和Set

List集合

特点:三有,即有索引,有可以重复的元素,读取数据有顺序。

实现类:Vector、ArrayList、LinkList

Vector:底层是可增长的数组,因而就有增删慢和查询快的特点,是最早的集合,诞生于JDK1.0,它是线程安全的,但是运行效率慢。索引被之后的ArrayList取代。

ArrayList:底层同样也是数组,和Vector一样,开辟的空间是连续的,增删慢,查询快,但是既然ArrayList能够取代Vector,一直延续至今,必须有它的优点,那就是线程不安全,运行速度快。

LinkedList:底层是链表,这个就和ArrayList有了区别,既然是链表实现,它开辟的空间是不连续的,这样带来的好处就是:增删快,查询慢,同样LinkedList也是线程不安全的,运行效率高。

大家一定有这样一个疑问:增删快慢和查询快慢是如何确定的呢?

增删:对于ArrayList是增删慢的,因为它是底层是数组,数据长度是固定的,如果数组已满,想要再添加一个元素的话,那么就需要将这个数组进行复制一份,成为一个新的数组,然后增加;退一步说,如果数组不满,那么想在i

索引处添加或者是删除一个元素,那么i+1之后的元素都是需要移动的,这样就浪费了时间。而对于LinkedList来说,想要删除或者增加i元素,只需要修改i前后元素的指针就可以了。

查询:对于ArrayList只要给一个索引就可以取出相应位置的;而对于LinkedList呢,需要一个个进行遍历,根据上一个指针找到下一个指针……这样时间自然就比ArrayList长了。

Set集合

特点:三无,即无索引,不可存放重复元素,读取数据顺序和存储顺序不一致(有自己特定的顺序)。线程是不安全的,运行效率高。

HashSet:实现了Set接口,有哈希表支持(实质是HashMap)可以存放null元素。

LinkedHashSet:是具体可预知顺序的集合,基于哈希表的链表实现,

TreeSet:是有序的二叉树,提供有序的set集合。

【双列集合】

【Map】

特点:双列集合的根接口,<key,value>,键不可以重复,值可以重复,一个键只能对应一个值,是无序的,键值成对出现

Hashtable:Map接口的实现类,底层是哈希表,线程安全效率低,命运和Vector一样,不允许存放null的键和值,JDK1.2被取代,但hashtable的子类properties,沿用至今,和IO结合,可以把数据变成持久的。

HashMap:取代Hashtable存储元素应该保证键唯一,可以存放现有类和自定义类,如果是自定义类要重写hashCode和equals方法。

LinkedHashMap:继承HashMap,方法类似,和linkedHashSet有相似之处,可以保证迭代的顺序性。

TreeMap:也是有序的二叉树,是的在其中存储的元素能够有序,按照特定的顺序输出。

【小结】

    这些是对集合特点的总结,每种集合都有自己的特性,要根据具体问题使用合适的集合,这样才能起到事半功倍的作用。当然只了解一些理论知识,绝不能解决细节,还需要理论联系实际。

0 0