JAVA集合框架总结(一)

虽然我们会经常使用到集合框架,但个人感觉内容还是有点多,经过各种查阅资料及自己平时的积累,

做了一个个人认为比较全面的总结吐舌头

首先,盗用一张集合框架图:


总的说来,Java API中所用的集合类,都是实现了Collection接口,他的一个类继承结构如下:

Collection<--List<--Vector

Collection<--List<--ArrayList

Collection<--List<--LinkedList

Collection<--Set<--HashSet

Collection<--Set<--HashSet<--LinkedHashSet

Collection<--Set<--SortedSet<--TreeSet

PS:此处也许有人会问,Map难道不是集合吗?他并没有实现Collection接口呀?

其实,在《java编程思想》中我们能找到答案:

java编程思想》的11章,第216页,正数第13行,中原文:……其中基本的类型是LIst、Set、Queue和Map。这些对象类型也称为集合类,但由于Java类库中使用了Collection这个名字来指代该类库的一个特殊子集,所以我使用了范围更广的术语‘容器’称呼它们……

真相大白

原来如此

我们争执的'集合'大部分指的是Collection接口下的实现类,而在java核心技术卷一书上把Map也算做集合类的根接口之一,但是java编程思想里用了"集合类"和"容器"两个称呼进行了说明和解释,所以Map是否是集合类(集合框架)的根接口是一个翻译问题!

书中所说的集合框架的总称'集合类'和'容器'是一个概念!!!

Collection

    Collection为集合层级的根接口,List,Set,Queue分别是他的子接口,属于单列集合。

           List

        简单来说,list是有序的,元素可重复的,特点如下:

        1. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。

        2. 所有的List中可以有相同的元素

        3. 所有的List中可以有null元素,甚至是多个null元素,且每个null占一个 位置

        4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表适合添加,删除操作。

        有ArrayList ,LinkedList,Vector三个实现类:

ArrayList:是基于Array的List,其封装了一些数组所不具备的功能方便我们使用, 所以ArrayList的性能不会高于数组, ArrayList是异步的,效率高,但线程不安全的。

Vector:底层也是基于Array的List,与ArrayList一样,但很重要的一点就是Vector“synchronized”的,Vector是同步的,是线程安全的,这个也是Vector和ArrayList的唯一的区别。

LinkedList:不同于前面两种List,它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势。

总结:在List子类中,ArrayList和Vector是基于数组,查询快,增删慢;LinkedList基于链表,增删快,查询慢

    Set

        简单来说,Set是无序的,元素不可重复的,特点如下:

        1. Set实现的基础是Map(HashMap)

        2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对    象,则会覆盖前面的对象

            Set接口下有HashSet,LinkedHashSet,TreeSet

    Queue

      队列遵循FIFO(先进先出原则),有单队列和循环队列两种

     Map

    映射(map)与集(set)或列表(list)有明显区别,映射中每个项都是成对的。通过key-value的形式存取数据。一个key对应一个 value,key是唯一的,value可以重复。

    其子类有:HashMap,HashTable,TreeMap等。

 

集合框架的概述和大致结构先总结到这里,往后再继续总结:

集合中存放的数据类型,集合的遍历,及集合的线程安全问题等。

 

参考:http://blog.csdn.net/zimou5581/article/details/52706283 

参考:https://baike.baidu.com/item/java%E9%9B%86%E5%90%88%E7%B1%BB/4758922?fr=aladdin 


猜你喜欢

转载自blog.csdn.net/ffb920724/article/details/79544209