是的,这篇blogs是一个总结篇,最开始的时候我提到过,对于java容器或集合的学习也可以看做是对数据结构的学习与应用。在前面我们分析了很多的java容器,也接触了好多种常用的数据结构,今天我们就来总结下这些内容。
 
     下面我们以数据结构的维度来总结下,在Java集合的实现过程中,底层到底使用了哪些常用的数据结构中,他们分别又有什么特点。
 
     1. 数组(Array)
     结构说明:在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。
     结构特点:可以随机访问,插入和删除效率低、内存固定。
     Java集合:ArrayList、Vector
 
     2. 链表(Linked List)
     结构说明:是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
     结构特点:插入和删除效率高、查找效率低。
     Java集合:LinkedList、LinkedHashMap(链表+哈希表)、LinkedHashSet(链表+哈希表)
 
     3. 哈希表(Hash)
     结构说明:若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。
     结构特点:查找效率高,插入和删除较快,内存固定,存在散列冲突。
     Java集合:HashMap、HashSet、HashTable、LinkedHashMap(链表+哈希表)、LinkedHashSet(链表+哈希表)
 
     4. 堆(Heap)
     结构说明:在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。
     结构特点:插入、删除较快,对最大项、最小项存取快,其他项存取较慢。
     Java集合:PriorityQueue(二叉堆实现的优先队列)
 
     5. 栈(Stack)
     结构说明:只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。
     结构特点:先进后出(First In Last Out)。
     Java集合:Stack
 
     6. 队列(Queue)
     结构说明:一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。
     结构特点:先进先出(First In First Out)。
     Java集合:ArrayDeque(双端队列)、LinkedList(双端队列)
     
     7. 树(Tree)
     结构说明:它是由n(n>=1)个有限节点组成一个具有层次关系的集合。
                   (1)每个元素称为结点(node)。
                   (2)有一个特定的结点被称为根结点或树根(root)。
                   (3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree)。
     结构特点:查询、插入、删除都比较快,但是算法复杂。
     Java集合:TreeMap(红黑树)、TreeSet(红黑树)
 
     
     上面我们就总结了下常用数据结构与Java集合的关系(当然常用数据结构还有"图",这里不做介绍了),并简单介绍了下每种数据结构的概念与特点。知道了这些概念性理论后,对于我们使用Java集合的时候可以给出一定的选择指导,从此以后再也不会一味地new ArrayList()和new HashMap()了,在使用前我们会尽可能的想我们使用集合的目的,使用过程中是插入和删除多还是查询比较多,是否需要做排序等等。
 
     另外通过总结会发现一个秘密,当然你也许早就发现了,那就是用所有的数据结构都可以用数组和链表来实现,相对应的ArrayList和LinkedList也可以作为任何一种数据结构的基础来使用。     
 
     学习理论不是目的,总结概念也不是目标,我们的口号是没有蛀牙!额~是学以致用,用理论指导实践,纸上得来终觉浅绝知此事要躬行,学而时习之不亦乐乎......
    
     
     

给jdk写注释系列之jdk1.6容器(13)-总结篇之Java集合与数据结构的更多相关文章

  1. 给jdk写注释系列之jdk1.6容器(12)-PriorityQueue源码解析

    PriorityQueue是一种什么样的容器呢?看过前面的几个jdk容器分析的话,看到Queue这个单词你一定会,哦~这是一种队列.是的,PriorityQueue是一种队列,但是它又是一种什么样的队 ...

  2. 给jdk写注释系列之jdk1.6容器(11)-Queue之ArrayDeque源码解析

    前面讲了Stack是一种先进后出的数据结构:栈,那么对应的Queue是一种先进先出(First In First Out)的数据结构:队列.      对比一下Stack,Queue是一种先进先出的容 ...

  3. 给jdk写注释系列之jdk1.6容器(10)-Stack&Vector源码解析

    前面我们已经接触过几种数据结构了,有数组.链表.Hash表.红黑树(二叉查询树),今天再来看另外一种数据结构:栈.      什么是栈呢,我就不找它具体的定义了,直接举个例子,栈就相当于一个很窄的木桶 ...

  4. 给jdk写注释系列之jdk1.6容器(9)-Strategy设计模式之Comparable&Comparator接口

    前面我们说TreeMap和TreeSet都是有顺序的集合,而顺序的维持是要靠一个比较器Comparator或者map的key实现Comparable接口.      既然说到排序,首先我们不用去关心什 ...

  5. 给jdk写注释系列之jdk1.6容器(8)-TreeSet&NavigableMap&NavigableSet源码解析

    TreeSet是一个有序的Set集合. 既然是有序,那么它是靠什么来维持顺序的呢,回忆一下TreeMap中是怎么比较两个key大小的,是通过一个比较器Comparator对不对,不过遗憾的是,今天仍然 ...

  6. 给jdk写注释系列之jdk1.6容器(7)-TreeMap源码解析

    TreeMap是基于红黑树结构实现的一种Map,要分析TreeMap的实现首先就要对红黑树有所了解.      要了解什么是红黑树,就要了解它的存在主要是为了解决什么问题,对比其他数据结构比如数组,链 ...

  7. 给jdk写注释系列之jdk1.6容器(6)-HashSet源码解析&Map迭代器

    今天的主角是HashSet,Set是什么东东,当然也是一种java容器了.      现在再看到Hash心底里有没有会心一笑呢,这里不再赘述hash的概念原理等一大堆东西了(不懂得需要先回去看下Has ...

  8. 给jdk写注释系列之jdk1.6容器(5)-LinkedHashMap源码解析

    前面分析了HashMap的实现,我们知道其底层数据存储是一个hash表(数组+单向链表).接下来我们看一下另一个LinkedHashMap,它是HashMap的一个子类,他在HashMap的基础上维持 ...

  9. 给jdk写注释系列之jdk1.6容器(4)-HashMap源码解析

    前面了解了jdk容器中的两种List,回忆一下怎么从list中取值(也就是做查询),是通过index索引位置对不对,由于存入list的元素时安装插入顺序存储的,所以index索引也就是插入的次序. M ...

随机推荐

  1. spice

    the following diagram illustrates VD-Interface illustrates display portemphasizing   emphasizing   e ...

  2. Windows 下整理内存工具推荐——cleanmem

    ---恢复内容开始--- cleanmem 是个不错的内存整理工具,www.xdown.com 下载有便携版提供下载. 软件有pro版和free版,一般情况下,free版够用了,没必要用pro版. p ...

  3. stdlib.h 头文件

    stdlib 头文件即standard library标准库头文件.stdlib.h里面定义了五种类型.一些宏和通用工具函数. 类型例如size_t.wchar_t.div_t.ldiv_t和lldi ...

  4. Umbraco Forms 中的Recaptcha遇到的问题

    在Umbraco Form中添加Recaptcha时,不能把它设置成Mandatory, 否则就会出错

  5. MVC3 Razor模板引擎

    http://blog.csdn.net/tiz198183/article/details/8659362 一.Views文件夹 -> Shared文件夹下的 _Layout.cshtml 母 ...

  6. PostgreSQL的initdb 源代码分析之五

    接前面,继续分析: putenv("TZ=GMT") 设置了时区信息. find_other_exec(argv[0], "postgres", PG_BACK ...

  7. pod install warning

    warning: Insecure world writable dir /usr/local/bin in PATH, mode 040777 解决方法: sudo chmod 775 /usr/l ...

  8. mvc4 web-api 与unity搭建接口

    对于接口重要的应该是 功能实现,合法性验证,性能监控,日志等模块 通过unity aop功能可以实现统一的日志模块和性能监控. 1.新建mvc4 webapi项目 nuget添加 unity 3.0+ ...

  9. 【WinForm】C# 发送Email

    发送Email  的条件 1.SmtpClient SMTP 协议    即 Host 处理事务的主机或IP地址     //smtp.163.com      UseDefaultCredentia ...

  10. Objective-C Basic

    1. Methods and Messages a) class method - call it by sending a message to the class itself b) instan ...