糟糕的程序员担心代码。优秀的程序员担心数据结构及其关系
这是非常真实的。这就是为什么每个雇主在面试时都希望候选人对数据结构有充分的了解。这也适用于 Android 开发人员。
在这篇帖子中,其中将涵盖所有的数据结构,对于任何Android开发者来说,面试和知识都是必不可少的。虽然还有很多东西要学习,但我将介绍 Android 面试中最常用和最常见的问题。
一丶什么是数据结构
数据结构是一种数据组织、管理和存储格式,可实现高效访问和修改。
更准确地说,数据结构是数据值、它们之间的关系以及可应用于数据的功能或操作的集合。
例如,我们有一些数据人名“ABC”和年龄25。这里“ABC”是字符串数据类型,25 是整数数据类型。
我们可以将此数据组织为像用户记录一样的记录,其中将包含用户的姓名和年龄。现在我们可以将用户的记录作为数据结构收集并存储在文件或数据库中。
现在,让我们看看 Android 中最常用和最常被问到的数据结构。
你在准备面试吗?
额外领取腾讯Android笔记,助你进一步提升。
私信:Android
腾讯最全面Android笔记大全(包含Android基础技能,性能优化,Framework,Compose,Flutter,车载应用,鸿蒙,kotlin)视频+文字综合版
二丶Android中最常用和询问最多的数据结构
让我们一一详细研究所有这些数据结构。
1.数组
数组是用于存储同类数据的最常用和最简单的数据结构。数组是存储在连续内存位置的相似项的集合。
例如,如果您要存储 10 个学生的分数,那么您可以通过为每个学生创建 10 个整数变量来做到这一点,并且您可以将分数存储在这些变量中。但是您必须在这里管理 10 个不同的变量,这是一项非常困难的任务,因为如果将来您必须存储 1000 名学生的分数,那么如果您遵循这种方法,则必须创建 1000 个变量。
因此,我们可以为此目的使用数组。您需要做的只是创建一个名为“marks”的数组,大小为 10 或 1000 或其他任何值,然后将标记存储在该数组中。
注意:在几乎所有编程语言中,我们都使用基于 0 的索引,即数组的索引将从 0 开始,一直到 n-1,其中“n”是数组的大小。
您可以借助其索引访问数组的元素:
marks[0] // to access the 1st element i.e. element at index 0 marks[2] // to access the 3rd element i.e. element at index 2 marks[4] // to access the 5th element i.e. element at index 4
数组的一些基本操作:
与数组相关的几个问题要尝试:
2.链表
链表几乎类似于数组,即它也是一种线性数据结构,用于存储相同类型的数据。这里,数据不是以连续方式存储的。链表中存储的数据是以节点的形式存储的,每个节点都可以通过一些指针或对下一个节点的引用连接到另一个节点。
因此,链表中的节点有两部分,即数据部分和指针或引用部分。数据部分存储节点的数据,而指针或引用部分存储下一个节点的地址(如果有)
上图是单链表的一个例子,即这里我们只有下一个节点的地址。还有一个称为“双向链表”的链表,其中前一个节点和下一个节点的地址由任何节点保存。除了这两种类型的链表,我们还有一个“循环链表”。
在上图中,“Head”指向链表的第一个节点,链表的最后一个节点指向“Null”,即在该节点之后没有节点。
链表的一些基本操作:
与链接列表相关的几个问题要尝试:
3.哈希表
哈希表是一种数据结构,用于以“键值”对的形式存储数据。您将拥有一些值或数据,并基于该数据生成一个键,并在该键的帮助下将值存储在哈希表中。如果输入是均匀分布的,那么哈希表将在 O(1) 时间内执行插入、删除和搜索操作。
生成密钥并基于该密钥存储数据的过程称为“哈希”。要从数据中生成密钥,我们需要一个称为“哈希函数”的函数。哈希函数将数据作为输入,并将密钥作为输出。
例如,如果要存储的数据是:1、2、3、4、5、26、17,使用的哈希函数是:
hashFunction(k): k % 10
并且数据将通过以下方式存储在哈希表中:
使用 Hash Table 时要考虑的几点:
与哈希表相关的几个问题可以尝试:
4.堆
堆栈是使用后进先出顺序(LIFO)的线性数据结构,即最后插入的元素将首先弹出。例如,如果您将一本书放在其他书上并继续此过程 50 本书,那么将首先获取最上面的书。在这里,您可以注意到最上面的书是放在最后或最近放置的书。
在 Stack 中,我们有一个“Top”变量表示堆栈的顶部。这是必要的,因为堆栈的所有操作都是在“Top”变量的帮助下完成的。
以下是堆栈的示例:
如果要从上面的 Stack 中删除元素,那么会先删除 5,然后再删除 4、3、2、1。
Stack上的一些基本操作:
与 Stack 相关的几个问题可以尝试:
5.队列
队列是使用先进先出(FIFO)顺序的线性数据结构,即队列中最先出现的元素将首先从队列中删除。例如,在排队订票时,先来的人会先订票,而新来订票的人必须站在队列的最后。
在队列中,我们有“前”和“后”。Front 用于指向队列的前面元素,而 Rear 用于指向队列的后面元素。
以下是队列的示例:
因此,如果要从上述队列中删除元素,则首先删除 1,然后删除 2、3、4 和 5。
同样,如果你想在上面的队列中插入一个元素,那么它将从 Rear 而不是Front插入。
Queue的一些基本操作:
与队列相关的几个问题要尝试:
6.树
树是一种非线性的分层数据结构,用于以节点的形式存储数据。在这里,我们有节点,所有节点都在它们之间绘制的边的帮助下相互连接。一个父节点可以没有子节点,也可以有一个子节点或多个子节点。但是子节点不能有多个父节点。
下面是一个简单的树示例:
一些与树相关的术语是:
一些类型的树是:
与树相关的几个问题要尝试:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!