您的位置:首页 > 编程语言 > Java开发

Java基础篇(四——3)——集合接口大比拼

2017-01-24 14:49 302 查看

引言:

         对比学习——让学习更加高效!

概述:

        本篇博客重点介绍Java主要接口的区别与联系,通过对比理解各个接口的工作原理,以及适用的场合。

内容:

        一 Collection与Collections?

主要是概念上的区别,Collection是集合类的上级接口,由Set和List继承;Collections是集合的一个帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

        二 List和Map区别?

    (1)用途不同:List存储单列数据的集合;Map存键和值双列数据的集合

            (2)存储规则不同:List中存储的数据有序且允许重复;Map中存储的数据无序且键不能重复,键对应的值可以重复。
            (3)原理:List、Set继承自Collection接口;Map不是。

   三 List、Map、Set如何存取元素?
   (1)Set继承父接口Collection,存对象:Set集合不允许有重复的元素,不能有俩个相等(不仅仅是相同)的对象,Set集合的add方法包含一个boolean的返回值,集合中没有某个对象,该对象成功加入集合Set,返回true,反之返回false;取对象:Set集合没法取某一个对象,只能通过Iterator取得所有对象,然后再逐一遍历得到需要的对象。
        
(2)List表示有序集合,存对象:List调用add(Obj
e)方法存入一个对象,存入的对象按照先后的顺序在集合中排序,也可以通过调用add(int index,Obj
e)在特定位置插入一个对象。一个对象可以在List集合中反复存储,不过并不是把这个对象本身多次放入集合中,而是集合中多个索引值指向同一个对象;取对象:List除了可以通过Iterator接口取得所有元素,然后遍历取值外,还可以调用get(index
i)来获得所需某个对象。
           (3)Map存储双列数据对象。存对象:Map通过方法put(obj
key, obj value)方法存储对象,每次存储一对key/value对象,不能存储重复的key值,通过equals方法比较相等。取对象:通过get(Object
key)方法,根据科研获得相应的value值,也可以获得所有key集合,或者所有value的集合,再或者key和value组成的Map.Entry对象的集合。

   四
ArrayList和Vector的联系与区别?
   (1)这俩个类都实现了List接口(List接口继承Collection接口),都属于有序集合zset,相当于一种动态的数组,可以按索引号取出某个元素,同时其中的数据允许重复。反观HashSet子类的集合不可以按索引去检索其中的元素,也不允许有重复的元素。
   (2)区别:
                    1)同步性:Vector是线程安全的,方法之间线程同步;而ArrayList是线程不安全的,方法之间线程不同步。一个线程访问集合使用ArrayList效率更高,反之则使用Vector,不用编写线程安全的代码。
                    2)数据增长:ArrayList与Vector都有一个初始的容量大小,当存储元素个数超过容量,Vector可以设置增长的空间大小,默认增长为原来的俩倍;而ArrayList没有提供设置增长空间的方法,文档中也没有明确规定,若可以增长,增长为原来的1.5倍;总之,Vector增长原来的一倍,ArrayList增加原来的0.5倍。
          (3)备注:vector与Hashtable是java1诞生的,支持线程安全;ArrayList与HashMap是java2提出的,不支持线程安全。
   五ArrayList、Vector、LinkedList存储性能和特性
   (1)ArrayList和Vector都使用数组方式存储数据,支持索引检索数据,插入数据较慢;
          (2)Vector使用线程安全(synchronized方法),性能比ArrayList较差
          (3)LinkedList使用双向链表实现存储,索引数据需要进行前向或后向遍历,插入数据通过指针记录前后项,性能较快。LinkedList也是线程不安全的,通过一些方法可以将LinkedList当做堆栈和队列来使用。
   六
HashMap和Hastable区别与联系
            (1)联系:
                    1)HashMap是Hashtable轻量级的实现,都完成了Map接口。
                    2)俩者采用的hash/rehash算法大致相同,性能差异不会太大
         (2)区别:
                    1)来源不同:Hashtable基于Dictionary类,HashMap是java1.2引入Map接口的一个实现
                    2)线程安全:Hashtable线程安全的;HashMap线程不安全的。
                    3)HashMap可以将空值作为一个表条目的key或者value。

总结:

          通过各大接口的对比,能够了解各个接口不同的适用场合,提高我们处理数据的效率和效果。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: