队列是数据结构中比较重要的一种类型,它支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列),跟咱们生活中的排队相似。html
Java 集合中的 Queue 继承自 Collection 接口 ,Deque, LinkedList, PriorityQueue, BlockingQueue 等类都实现了它。 Queue 用来存放 等待处理元素 的集合,这种场景通常用于缓冲、并发访问。 除了继承 Collection 接口的一些方法,Queue 还添加了额外的 添加、删除、查询操做。java
Set 继承于 Collection 接口,是一个不容许出现重复元素,而且无序的集合,主要 HashSet 和 TreeSet 两大实现类。node
在判断重复元素的时候,Set 集合会调用 hashCode()和 equal()方法来实现。git
HashSet 是哈希表结构,主要利用 HashMap 的 key 来存储元素,计算插入元素的 hashCode 来获取元素在集合中的位置;github
TreeSet 是红黑树结构,每个元素都是树中的一个节点,插入的元素都会进行排序;算法
在 List 中,用户能够精确控制列表中每一个元素的插入位置,另外用户能够经过整数索引(列表中的位置)访问元素,并搜索列表中的元素。 与 Set 不一样,List 一般容许重复的元素。 另外 List 是有序集合而 Set 是无序集合。数据库
ArrayList 是一个数组队列,至关于动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低。数组
LinkedList 是一个双向链表。它也能够被看成堆栈、队列或双端队列进行操做。LinkedList随机访问效率低,但随机插入、随机删除效率高。安全
Vector 是矢量队列,和ArrayList同样,它也是一个动态数组,由数组实现。可是ArrayList是非线程安全的,而Vector是线程安全的。数据结构
Stack 是栈,它继承于Vector。它的特性是:先进后出(FILO, First In Last Out)。相关阅读:java数据结构与算法之栈(Stack)设计与实现
二叉树(百度百科)
(1)彻底二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,而且叶子结点都是从左到右依次排布,这就是彻底二叉树。
(2)满二叉树——除了叶结点外每个结点都有左右子叶且叶子结点都处在最底层的二叉树。
(3)平衡二叉树——平衡二叉树又被称为AVL树(区别于AVL算法),它是一棵二叉排序树,且具备如下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,而且左右两个子树都是一棵平衡二叉树。
彻底二叉树(百度百科)
彻底二叉树:叶节点只能出如今最下层和次下层,而且最下面一层的结点都集中在该层最左边的若干位置的二叉树
满二叉树(百度百科,国内外的定义不一样)
国内教程定义:一个二叉树,若是每个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,若是一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。
堆是具备如下性质的彻底二叉树:每一个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每一个结点的值都小于或等于其左右孩子结点的值,称为小顶堆
二叉查找树的特色:
平衡二叉树(百度百科,平衡二叉树的经常使用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等)
红黑树的应用:
TreeMap、TreeSet以及JDK1.8以后的HashMap底层都用到了红黑树。
为何要用红黑树
简单来讲红黑树就是为了解决二叉查找树的缺陷,由于二叉查找树在某些状况下会退化成一个线性结构。详细了解能够查看 漫画:什么是红黑树?(也介绍到了二叉查找树,很是推荐)
推荐文章:
B-树(或B树)是一种平衡的多路查找(又称排序)树,在文件系统中有所应用。主要用做文件的索引。其中的B就表示平衡(Balance)
想要深刻学习的同窗们能够加入QQ群讨论,有全套资源分享,经验探讨,没错,咱们等着你,分享互相的故事!