Android应用开发岗 面试汇总-数据结构与算法

2022-04-08  本文已影响0人  陈祥_

背景

最近在准备面试,结合之前的工作经验和近期在网上收集的一些面试资料,准备将Android开发岗位的知识点做一个系统的梳理,整理成一个系列:Android应用开发岗 面试汇总。本系列将分为以下几个大模块:
Java基础篇Java进阶篇常见设计模式
Android基础篇Android进阶篇性能优化
网络相关数据结构与算法
常用开源库、Kotlin、Jetpack

注1:以上文章将陆续更新,直到我找到满意的工作为止,有跳转链接的表示已发表的文章。
注2:该系列属于个人的总结和网上东拼西凑的结果,每个知识点的内容并不一定完整,有不正确的地方欢迎批评指正。
注3:部分摘抄较多的段落或有注明出处。如有侵权,请联系本人进行删除。

本节内容只对部分数据结构做概述,算法的学习和刷题,文章底下会给出推荐的公众号

一、八大数据结构分类

链接

二、常见集合

1 ArrayList

链接

2 LinkedList

3 HashMap

3.1 数据结构

用到了4中数据结构:数组、链表、哈希表、红黑树(Java 8引入)

3.2 map.put(k,v)实现原理

(1)首先将k,v封装到Node对象当中(节点)。
(2)然后它的底层会调用K的hashCode()方法得出hash值。
(3)通过哈希表函数/哈希算法,将hash值转换成数组的下标,
①下标位置上如果没有任何元素,就把Node添加到这个位置上。
②如果下标对应的位置上有链表。此时,就会拿着k和链表上每个节点的k进行Object.equal()。
③如果所有的equals方法返回都是false,那么这个新的节点将被添加到链表的末尾。
④如其中有一个equals返回了true,那么这个节点的value将会被覆盖。

3.3 map.get(k)实现原理

(1)先调用k的hashCode()方法得出哈希值,并通过哈希算法转换成数组的下标。
(2)通过上一步哈希算法转换成数组的下标之后,在通过数组下标快速定位到某个位置上。
①如果这个位置上什么都没有,则返回null。
②如果这个位置上有单向链表,那么它就会拿着K和单向链表上的每一个节点的K进行equals,如果所有equals方法都返回false,则get方法返回null。
③如果其中一个节点的K和参数K进行equals返回true,那么此时该节点的value就是我们要找的value了,get方法最终返回这个要找的value。

3.3 HashMap红黑树原理分析

相比 jdk1.7 的 HashMap 而言,jdk1.8最重要的就是引入了红黑树的设计,红黑树除了插入操作慢其他操作都比链表快

3.4 其他知识点

链接

三、算法

算法的学习和刷题是一个长期的过程,这里推荐一个不错的学习算法的地方:
labuladong 的算法小抄

上一篇 下一篇

猜你喜欢

热点阅读