是的,这篇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也能够做为任何一种数据结构的基础来使用。
学习理论不是目的,总结概念也不是目标,咱们的口号是没有蛀牙!额~是学以至用,用理论指导实践,纸上得来终觉浅绝知此事要躬行,学而时习之不亦乐乎......