自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 问答 (4)
  • 收藏
  • 关注

原创 日常记录:java.io.FileNotFoundException: open failed: EISDIR (Is a directory)

newFileName原来我用的是privateTool.name没考虑到用户可能没输入工具名就保存草稿的可能,所以导致找到了目录而不是文件,加了默认名就可以了。

2024-06-11 22:55:19 66

原创 记个笔记:Compose 检测状态变化的标准

valueMap。

2024-06-07 11:44:05 83

原创 Android里的viewmdoel实例问题

2.如果viewmodel是重新在某个compose实例化的,那么这个所有变量会初始化,需要重新加载数据库读取数据。1.如果viewmodel是从启动活动里一路往下传,那么该实例里的所有变量的值是共享且都有操作权限。

2024-06-05 19:19:44 110

原创 已解决Android Compose:用户头像无法更新问题

如果传入的是不同的头像 URI,而不是同一个 URI。如果每次传入的 URI 都是相同的,那么头像路径也会相同,导致头像没有更新。所以其实头像每次都更新了,但是头像路径名没变过,compose检测字符串是否变化以字符值为准,所以没有触发compose更新。使用了livedata和stateflow都没有变化。这样子compose就可以检测到改变了。我保存的头像名和路径每次都是一致的,可以选择图片、但是只更新一次。

2024-06-04 12:57:06 101

原创 Android Compose里的TextField文本更新本质解析

如果text本身不是可观察数据那么Compose就无法更新value的值,所以无法展示新数据,因此我们用var text by remember{mutablestateof("")}来进行初始化以及将其变为可观察数据来更新value值。本质就是我们输入的文字本质上是newValue,然后再onValueChange里我们自定义逻辑是把newVlaue的值赋给了text变量,也即是把我们的输入文本数据赋给text;我之前一直以为我在TextField输入框里输入的是text变量,但其实不是。

2024-06-03 10:45:50 156 1

原创 已解决Android Compose:The expression is unused

在查过gpt之后原来是因为clickable接收函数调用而不是函数类型对象本身。

2024-06-02 11:48:52 168

原创 已解决Android Room: Room cannot verify the data integrity.

就因为一个表名我在导入预数据时候一直报错。我对自己也是无语了,逗笑我了。改了表名为默认名之后就欧克了。我擅自主张改变了实体表的名。书上的代码是这个样子的。

2024-05-29 16:02:06 209

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第20章

这里介绍的技巧可以帮助优化您的代码。再次强调,您始终要先确定当前的时间复杂度(Big O)以及最理想的时间复杂度。之后,您就可以使用其他可用的技巧了。您会发现,有些技巧在某些情况下比其他技巧更有效,但在特定情况下思考它们是否适合当前任务是非常值得的。通过经验,您会提升优化能力,可能还会发展出自己的额外技巧!

2023-12-22 17:20:46 32

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第19章

你现在已经学会了如何从各个角度衡量我们算法的效率,包括时间和空间。你已经具备了分析能力,可以权衡每个算法,并做出明智的决策,选择哪种方法用于我们自己的应用程序。既然你现在能够做出自己的决策,是时候进入我们旅程的最后一章了。在这一章中,我将提供一些关于如何优化你自己的代码的最后建议,并带你通过一些实际场景,我们将一起进行优化。

2023-12-21 18:13:11 27

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第18章

我们即将结束我们的旅程,因为本章代表着你在本书中遇到的最后一个重要数据结构。你已经看到图是处理涉及关系的数据时非常强大的工具,除了使我们的代码快速之外,它们还可以帮助解决棘手的问题。实际上,我可以用一本书来讨论图。有许多围绕这种数据结构的有趣且有用的算法,比如最小生成树、拓扑排序、双向搜索、弗洛伊德-沃舍尔算法、贝尔曼-福特算法和图着色,仅举几例。然而,这一章应该为你探索这些额外的主题奠定基础。在我们的旅程中,我们的主要关注点一直是我们的代码运行速度。

2023-12-21 17:07:03 25

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第17章

我们现在已经涵盖了三种类型的树:二叉搜索树、堆和字典树。还有许多其他类型的树,比如 AVL 树、红黑树、2-3-4 树等等。每种树都有独特的特性和行为,可以用于特定情况。我鼓励你了解更多关于这些不同树的知识,但无论如何,现在你已经对不同的树是如何解决不同问题有了一定的了解。现在是时候介绍本书的最后一个数据结构了。你所学到的有关树的知识将帮助你理解图。图在许多不同的情况下都很有帮助,这也是它们如此受欢迎的原因。所以,让我们开始吧。

2023-12-19 18:47:07 23 1

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第16章

虽然插入算法似乎相当直接,但有一个小问题。第一步要求我们将新值放置为堆的最后一个节点。但这引出了一个问题:我们如何找到将成为最后一个节点的位置?让我们再次看看在插入40之前的堆:通过观察图表,我们知道要使40成为最后一个节点,我们将其作为8的右子节点,因为这是底层的下一个可用位置。然而,计算机没有眼睛,不会将堆视为一堆行。它只看到根节点,并可以沿着链接查看子节点。那么,我们如何为计算机创建一个算法来找到新值的位置呢?以我们的示例堆为例。

2023-12-19 15:02:53 30 1

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第15章

二叉搜索树是一种强大的基于节点的数据结构,它提供了顺序维护,并且具有快速的搜索、插入和删除功能。相较于它的链表近亲更为复杂,但它提供了巨大的价值。然而,二叉搜索树只是树的一种类型。有许多不同类型的树,每种树都在特定情况下带来独特的优势。在下一章中,我们将探索另一种树,它将为特定但常见的场景带来独特的速度优势。

2023-12-18 16:32:03 39 1

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第14章

正如我们所看到的,数组和链表之间微妙的差异为我们的代码带来了比以往更快的新方式。通过学习链表,您还了解了节点的概念。然而,链表只是基于节点的数据结构中最简单的一种。在接下来的章节中,您将学习到更复杂、更有趣的基于节点的结构,它们将揭示节点如何带来巨大的力量和效率,展示出全新的可能性。

2023-12-18 14:02:36 28 1

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第13章

快速排序和快速选择算法是递归算法,为棘手问题提供了美观高效的解决方案。它们是非显而易见但经过深思熟虑的算法的很好例子,可以提升性能。现在我们已经了解了一些更高级的算法,我们现在要探索一个新方向,探索更多的附加数据结构。其中一些数据结构涉及递归操作,所以我们现在将会充分准备好去解决这些。除了非常有趣之外,我们将看到每个数据结构都有一种特殊的能力,可以为各种应用带来重大优势。

2023-12-17 17:44:55 29 1

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第12章

现在你已经能够编写高效的递归代码,也就掌握了一种超能力。你即将遇到一些非常高效但也复杂的算法,其中许多都依赖于递归的原理。

2023-12-17 16:02:53 26 1

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第11章

学会编写使用递归的函数确实需要练习。但是你现在掌握了一些技巧和技术,这将让学习过程变得更容易。不过,我们的递归之旅还没有结束。尽管递归是解决各种问题的好工具,但如果不小心使用,它实际上会大大减慢代码的速度。在下一章中,你将学习如何使用递归来保持代码简洁高效。

2023-12-17 13:02:32 28 1

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第10章

如你在文件系统示例中所见,递归通常是一个很好的选择,尤其是当算法需要深入到某个事物的任意层级时。你现在已经了解了递归的工作原理以及它的难以置信的实用性。你也学会了如何逐步走过并阅读递归代码。然而,当人们初学时,编写自己的递归函数通常是困难的。在下一章中,我们将探讨一些技巧,帮助你学会编写递归函数。在此过程中,你还将发现其他一些递归能够成为极好工具的重要用例。

2023-12-16 22:12:40 23 1

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第9章

栈非常适合处理应该按照后进先出顺序处理的任何数据。例如,文字处理器中的“撤销”功能就是栈的一个很好的用例。当用户输入时,我们通过将每次按键推送到栈中来跟踪每次按键。然后,当用户按下“撤销”键时,我们从栈中弹出最近的按键,并从文档中删除它。此时,他们次新的按键现在位于栈的顶部,如果需要,可以随时撤销。正如你所见,栈和队列是程序员处理各种实际算法的优雅工具。既然你已经了解了栈和队列,你就解锁了一个新成就:你可以学习递归,因为递归依赖于栈。递归还作为我在本书后面将要介绍的许多更高级和高效的算法的基础。

2023-12-16 21:32:55 27 1

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第8章

哈希表在构建高效软件时是不可或缺的。凭借其 O(1) 的读取和插入操作,它是一种难以超越的数据结构。直到现在,我们对各种数据结构的分析都围绕着它们的效率和速度。但您知道有些数据结构除了速度之外还提供其他优势吗?在下一课中,我们将探讨两种可以帮助提高代码优雅性和可维护性的数据结构。

2023-12-16 20:09:54 28 1

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第7章

恭喜!你现在是一个大O表示法的专家。你可以分析各种算法并对其时间复杂度进行分类。拥有这些知识,你将能够系统地优化你的代码以提高速度。说到优化,下一章中我们将发现一种全新的数据结构,它是加速算法最有用、最常见的工具之一。我在谈论一些真正的速度提升。

2023-12-16 18:53:40 30 1

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第6章

能够区分最佳情况、平均情况和最坏情况是选择最适合需求的最佳算法的关键技能,同时也是进一步优化现有算法以显著提速的重要技能。记住,虽然为最坏情况做好准备是好事,但平均情况才是大多数发生的情况。现在我们已经涵盖了与大 O 表示法相关的重要概念,让我们将知识应用到实际算法中。在下一章中,我们将看一下各种可能出现在真实代码库中的日常算法,并根据大 O 表示法确定每个算法的时间复杂度。

2023-12-16 16:40:57 28 1

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第5章

我们现在有一些强大的分析工具可供使用。我们可以使用大 O 来广泛确定算法的效率,也可以比较落在一个大 O 分类内的两个算法。然而,在比较两个算法的效率时,还必须考虑另一个重要因素。到目前为止,我们关注的是算法在最坏情况下的速度。然而,最坏情况通常不会一直发生。平均而言,发生的大多数情况是…呃…平均情况。在下一章中,你将学会如何考虑所有的情况。

2023-12-16 14:24:32 25 1

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第4章

确实,对大 O 表示法有扎实的理解可以帮助你识别慢速代码,并选择两个竞争算法中更快的那个。然而,在某些情况下,大 O 表示法会让我们相信两个算法的速度相同,而实际上其中一个更快。在接下来的章节中,你将学习如何评估各种算法的效率,即使大 O 表示法无法提供足够细致的信息。

2023-12-15 21:15:45 30

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第3章

用大O表示法,我们有一个一致的系统,可以比较任何两个算法。有了它,我们将能够检查现实生活中的场景,并在竞争的数据结构和算法之间进行选择,使我们的代码更快,并能够处理更重的负载。在下一章中,我们将遇到一个真实的例子,我们将使用大O表示法显著加速我们的代码。

2023-12-15 19:59:42 37

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第2章

常常有多种方法可以实现特定的计算目标,而你选择的算法可以严重影响代码的速度。同样重要的是要认识到,通常并不存在一种适用于每种情况的单一数据结构或算法。例如,仅仅因为有序数组允许进行二分查找,并不意味着你应该总是使用有序数组。在你不预期需要频繁搜索数据、只需添加数据的情况下,标准数组可能是更好的选择,因为它们的插入速度更快。正如我们所见,分析竞争算法的方法是计算每个算法所需的步数。在下一章中,我们将研究一种形式化的方法来表达竞争数据结构和算法的时间复杂度。

2023-12-15 16:41:05 31

翻译 Jay Wengrow - A Common-Sense Guide to Data Structures and Algorithms【自译】第1章

数据结构和算法不仅仅是抽象的概念。掌握它们可以让你编写高效的代码,从而使软件运行更快,占用更少的内存。对于如今存在于日益移动化平台并处理日益庞大数据量的软件应用来说,这非常重要。然而,关于这些主题的大多数资源存在一个问题,它们……嗯……晦涩难懂。大多数文本都充斥着数学术语,如果你不是数学专业人士,很难理解到底在讲些什么。即使有些书声称让算法“易懂”,似乎也默认读者具有高深的数学学位。因此,许多人因感觉自己不“聪明”而避开这些概念。然而,事实是关于数据结构和算法的一切都可以归结为常识。

2023-12-15 15:33:27 63

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除