Array、List、Set、与Map

            最近经历了几次面试,发现Java基础还是很重要的,所以好好弥补之前遗留的漏洞还是很有必要的。基础不牢固,就会越来越浮,无法走的深入。

        这篇文章,主要总结了映射、集合等容器的相关联系与区别,会有比较透彻的分析,聪明的你看了定会过目不忘~

        1、首先 ,我们来分析Array数组。

        Array数组通过下标来实现操作,速度快、效率高,但我们无法判断其中有多少元素,我们只能通过length来明确它的大小。

        如果想专门操作Array,我们可以通过Arrays类来实现,它里面有一组static函数。

 

        当我们不知道到底需要多少对象时,数组就显得力不从心了,这时我们就要用到集合。


         2、Collection,最基本的集合接口,声明了Set和List的通用方法,Set和List都继承了Collection、Map。

         2.1 Set

         Set是一种比较简单的集合。它不包含重复对象,且不按特定的方式存储。

         Set是一个接口,HashSet和TreeSet对其进行了实现。HashSet类按照哈希算法来存取集合中的对象,存取速度比较快,为快速查找而设计 ;TreeSet类实现了SortedSet接口,是保存次序的Set,底层为树结构,适用于对集合中的对象进行排序。 

       在Set中,实际存放的是对象的引用,而不是对象本身,这点我们可以实际放入几个字符串及几个引用,再通过size方法来测试。

       Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只是行为不同(这是继承与多态思想的典型应用:表现不同的行为)。


       2.2 List

       List也是一个集合,但它可以存放重复对象。它通过索引来操作,不按顺序存储,但通过链表维护了访问顺序。

       List也是一个接口,ArrayList和LinkedList、Vector对其进行了实现。ArrayList代表长度可变的数组,可以对元素进行快速随机的访问,但向ArrayList()中插入与删除元素的速度慢。而LinkedList在实现中采用了双向链表数据结构,弥补了ArrayList插入与删除速度慢的缺陷,但无法满足快速随机访问的要求。

       

       3、Map

       Map是一种key-value数据结构的集合,也是一个接口,它没有继承与Collection接口。从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

       标准的Java类库中包含了几种不同的Map:HashMap, TreeMap, LinkedHashMap。它们都有同样的基本接口Map,但是行为、效率、排序策略、保存对象的生命周期和判定“键”等价的策略等各不相同。 

        HashMap使用了hashCode来取代对键的缓慢搜索。HashCode是“相对唯一”用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。

        LinkedHashMap: 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。 

             TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。

       

        小结,来图:

         结构图:

        

        集合对比图:

         

         下面整理的比较常用:

                 HashSet:继承于Set;散列存储,无序;不可重复;

       HashMap:继承与Map;散列存储,无序;不可重复;

                ArrayList:继承于List;有序存储;可以重复;可以确定访问次序;

       LinkList:任意位置进行高效的插入和删除操作;有序序列。



发布了145 篇原创文章 · 获赞 37 · 访问量 33万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章