0
点赞
收藏
分享

微信扫一扫

java中常见的几种数据结构

想了解更多算法题,可以关注微信公众号“数据结构和算法”,每天一题为你精彩解答。也可以扫描下面的二维码关注
java中常见的几种数据结构_链表

数据结构相对于算法来说简直是屈指可数,常见的数据结构也就那几种,很容易掌握,但算法可以有成千上万,要想全部掌握基本上很难,我们常说的数据结构和算法是指数据结构和算法的结合,如果对算法感兴趣的也可以关注我的微信公众号“数据结构和算法”,这里基本上每个工作日都会推送一道算法题。闲话少说,这里我们来介绍一下常见的一些数据结构。

一,数组

数组算是最简单的一种数据结构了,在java中数组的类型只要不是Object类型,那么它的数据类型必须一致,因为Object类型的数组可以存放任何值。对于数组的操作也很简单,下标是从0开始,到length-1(length是数组的长度)。在java中对数组操作的类也比较多,最常见的是ArrayList。面试的时候很多人喜欢拿数组和链表比较,其实也就是一个查找方便,一个插入方便的。
参照:​​​常见数据结构-数组​​

二,链表

链表有单向的和双向的,还有环形的,java中双向的链表有LinkedList具体可以看下我之前写的​​LinkedList源码详解​​​,环形的有LinkedHashMap,也可以查看​​Android LinkedHashMap源码详解​​​,其中LinkedHashMap是HashMap的子类,这个一般用于图片缓存,像android中的LRUCache就是封装的LinkedHashMap。关于链表的面试题也比较多,比较经典的两个就是,一个是反转单链表,这个可以查看我之前写的​​Link链表的反转​​​,还一个就是判断一个链表是否有环,(环形链表有两种,一种是上面的LinkedHashMap是0型的环形链表,还一种是6型的链表,我们这里所说的是6型的链表),这个使用一快一慢两个指针判断即可,如果有环还可以根据相遇的位置来找到环的起点,方法就是用两个指针分别在链表的起点和环相遇的位置每次都走一步,到他们相遇的时候就是环的起点。
参照:​​​常见数据结构-链表​​

三,队列

队列就像他的名字一样,大家排队卖东西,先到先买,所以在优先级一样的情况下他是一个先进先出的数据结构。但也有例外,在android中有这样两个类PriorityQueue和PriorityBlockingQueue,他们不是先进先出的,他会根据你的优先级给你排序,优先级高的排在前面,优先级低的排到后面。这个就有点像银行办业务一样,并不是先来的先给你办,如果你是VIP,那么你的优先级就高就先给你办。
android中还有一个叫双端队列,具体可看一下我之前写的​​​ArrayDeque源码详解​​​ 参照:​​常见数据结构-队列​​

四,栈

栈和队列的区别就是栈是一种先进后出的数据结构,这个就好比你往桶里放东西,先放的肯定是在最下面,最后放的肯定是在最上面,拿的时候是从上面拿的,也就是最后放的。

五,散列表

最常见的也就是HashMap,它是数组和链表的结合,具体可以看下我前面的​​Android HashMap源码详解​​

六,堆

堆其实就是一个完全二叉树,它的特点就是除了最后一行,其他每行都是满的,并且最后一行如果不满,你们他们都是靠左的。常见的有大顶堆和小顶堆,具体可看下我微信公众“数据结构和算法”中推送的十几种排序算法中的堆排序。

七,树

关于树的就比较多了,常见的有二叉树,还有我前面写的红黑树​​TreeMap红黑树源码详解​​,还有字典树,B-树,B+树,哈夫曼树等,

八,图

图在面试中一般遇到的比较少,常见的一个是有向图(也就是有方向的),一个是无向图(也就是无方向的)。


举报

相关推荐

0 条评论