您的当前位置:首页正文

Java中常见的八种数据结构

来源:九壹网

Java中常见数据结构

==============================================================================

一、 8种数据结构


Java中有8种常见数据结构

  • 哈希表(Hash)

  • 队列(Queue)

  • 树(Tree)

  • 堆(Heap)

  • 数组(Array)

  • 栈(Stock)

  • 链表(Linked List)

  • 图(Graph)

哈希表(Hash)


哈希表也叫散列表,是一种可以通过关键码值(Key-Value)直接访问的数据结构,可以实现快速查询、插入、删除。

数组类型的数据结构在插入和删除时时间复杂度高;链表类型的数据结构在查询时时间复杂度高;而哈希表结合了数组与链表的优势。

在jdk8中,Java中经典的HashMap,以数组+链表+红黑树构成。

哈希函数在哈希表中起着关键作用,能够将任意长度的输入转为定长的输出(哈希值)。通过哈希函数,能够快速地对数据元素进行定位。

哈希值并不是具有唯一性,在某些情况下Hash值会冲突,HashMap在Hash冲突时,会将元素在数组的位置上添加为链表元素结点,当链表长度大于8时,链表会转换为红黑树

队列(Queue)


类比水管,两端放开,一端入水,一端出水。

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

树(Tree)


树是一种非线性结构,由n(n>0)个有限结点组成有层次关系的集合。

术语:

  • 二叉树:每个结点最多含有2个子树。

  • 完全二叉树:除了最外层的结点,其他各层结点都达到最大数。

  • 满二叉树:

  • 国内定义:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。

  • 国外定义:如果一棵二叉树的结点要么是叶子结点,要么它有两个子结点,这样的树就是满二叉树。

  • 二叉查找树:

  • 任意结点的左子树不为空,左子树所有结点的值均小于根结点的值。

  • 任意结点的右子树不为空,右子树所有结点的值均大于根节点的值。

  • 任意结点的左右子树也是一颗二叉查找树。

  • 平衡二叉树:也称AVL树,当且仅当任何结点的两棵子树的高度差不大于1的二叉树。Java中HashMap的红黑树就是平衡二叉树!!!

  • B树:一种对读写优化的自平衡二叉树,在数据库的索引中常见的BTREE就是自平衡二叉树。

  • B+树:B+树是应文件系统所需而产生的B树的变形树。

  • 所有的非终端结点可以看成是索引部分,结点中仅含有其子树根结点中最大(或最小)关键字

  • 所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序链接。

  • 有m个子树的中间节点包含有m个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引。

Java8中HashMap的红黑树

实质上就是平衡二叉树,通过颜色约束二叉树的平衡:

1)每个节点都只能是红色或者黑色

2)根节点是黑色

3)每个叶节点(NIL 节点,空节点)是黑色的。

4)如果一个节点是红色的,则它两个子节点都是黑色的。也就是说在一条路径上不能出现相邻的两个红色节点。

5)从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

堆(Heap)

最后总结我的面试经验

2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

BAT面试经验

实战系列:Spring全家桶+Redis等

其他相关的电子书:源码+调优

面试真题:

了解详情https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB
[外链图片转存中…(img-YR0nutok-1724428306446)]

面试真题:

[外链图片转存中…(img-6fnmu4Te-1724428306446)]

[外链图片转存中…(img-au8apL7g-1724428306447)]

了解详情https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB

因篇幅问题不能全部显示,请点此查看更多更全内容

Top