• java集合框架综述


    一、集合框架图

    简化图:

    说明:对于以上的框架图有如下几点说明

    1.所有集合类都位于java.util包下。Java的集合类主要由两个接口派生而出:CollectionMap,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
    2. 集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。
    3. 抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。
    4. 实现类:8个实现类(实线表示),对接口的具体实现。
    5. Collection 接口是一组允许重复的对象。
    6. Set 接口继承 Collection,集合元素不重复。
    7. List 接口继承 Collection,允许重复,维护元素插入顺序。
    8. Map接口是键-值对象,与Collection接口没有什么关系。
    9.Set、List和Map可以看做集合的三大类:
    List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。
    Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是集合里元素不允许重复的原因)。
    Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。

    二、总体分析

    大致说明:
    看上面的框架图,先抓住它的主干,即Collection和Map

    1、Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性。Collection包含了List和Set两大分支。
    (1)List是一个有序的队列,每一个元素都有它的索引。第一个元素的索引值是0。List的实现类有LinkedList, ArrayList, Vector, Stack。

    (2)Set是一个不允许有重复元素的集合。Set的实现类有HastSet和TreeSet。HashSet依赖于HashMap,它实际上是通过HashMap实现的;TreeSet依赖于TreeMap,它实际上是通过TreeMap实现的。

    2、Map是一个映射接口,即key-value键值对。Map中的每一个元素包含“一个key”和“key对应的value”。AbstractMap是个抽象类,它实现了Map接口中的大部分API。而HashMap,TreeMap,WeakHashMap都是继承于AbstractMap。Hashtable虽然继承于Dictionary,但它实现了Map接口。

    3、接下来,再看Iterator。它是遍历集合的工具,即我们通常通过Iterator迭代器来遍历集合。我们说Collection依赖于Iterator,是因为Collection的实现类都要实现iterator()函数,返回一个Iterator对象。ListIterator是专门为遍历List而存在的。

    4、再看Enumeration,它是JDK 1.0引入的抽象类。作用和Iterator一样,也是遍历集合;但是Enumeration的功能要比Iterator少。在上面的框图中,Enumeration只能在Hashtable, Vector, Stack中使用。

    5、最后,看Arrays和Collections。它们是操作数组、集合的两个工具类。

    ---|Collection: 单列集合

                                ---|List:存储顺序(存入和取出的顺序相同), 可重复

                                         ---|ArrayList:         数组实现, 查找快, 增删慢

                                                   由于是数组实现, 在增和删的时候会牵扯到数组

    增容, 以及拷贝元素. 所以慢。数组是可以直接

    按索引查找, 所以查找时较快

                                         ---|LinkedList:       链表实现, 增删快, 查找慢

                                                   由于链表实现, 增加时只要让前一个元素记住自

    己就可以, 删除时让前一个元素记住后一个元

    , 后一个元素记住前一个元素. 这样的增删效

    率较高但查询时需要一个一个的遍历, 所以效率

    较低

                                         ---|Vector:        ArrayList原理相同, ArrayList线程安全,效率高,Vector线程安全, 效率略低

                                         ArrayList实现方式相同, 但考虑了线程安全问

    , 所以效率略低

                                ---|Set: 无存储顺序(存入和取出的顺序不一定相同)

                                         ---|HashSet  基于哈希表方式,不可重复

                                         ---|TreeSet  底层二叉树结构

                                         ---|LinkedHashSet

    ---|Map: 键值对   key value值对方式存储

                       ---|HashMap底层为哈希表,使用键值对存储

                       ---|TreeMap底层红黑树结构

                       ---|HashTable底层为哈希表,使用键值对存储

                       ---|LinkedHashMap

    ---|Collection: 单列集合

                                ---|List:存储顺序(存入和取出的顺序相同), 可重复

                                         ---|ArrayList:         数组实现, 查找快, 增删慢

                                                   由于是数组实现, 在增和删的时候会牵扯到数组

    增容, 以及拷贝元素. 所以慢。数组是可以直接

    按索引查找, 所以查找时较快

                                         ---|LinkedList:       链表实现, 增删快, 查找慢

                                                   由于链表实现, 增加时只要让前一个元素记住自

    己就可以, 删除时让前一个元素记住后一个元

    , 后一个元素记住前一个元素. 这样的增删效

    率较高但查询时需要一个一个的遍历, 所以效率

    较低

                                         ---|Vector:        ArrayList原理相同, ArrayList线程安全,效率高,Vector线程安全, 效率略低

                                         ArrayList实现方式相同, 但考虑了线程安全问

    , 所以效率略低

                                ---|Set: 无存储顺序(存入和取出的顺序不一定相同)

                                         ---|HashSet  基于哈希表方式,不可重复

                                         ---|TreeSet  底层二叉树结构

                                         ---|LinkedHashSet

    ---|Map: 键值对   key value值对方式存储

                       ---|HashMap底层为哈希表,使用键值对存储

                       ---|TreeMap底层红黑树结构

                       ---|HashTable底层为哈希表,使用键值对存储

                       ---|LinkedHashMap

  • 相关阅读:
    语言相关
    一道简单DP题
    一道概率题
    Android CrashHandler
    一道简单数学题
    面试中遇到的随机题目
    VMWare 无损扩展磁盘大小
    Android 源码编译记录
    Android handler 内存泄露分析及解决方法
    Android 反编译
  • 原文地址:https://www.cnblogs.com/lixinjun8080/p/10918362.html
Copyright © 2020-2023  润新知