- 博客(29)
- 收藏
- 关注
原创 【Android】广播机制
3.1发送标准广播新建广播接收器@Override修改广播接收器注册<receiver修改主活动代码,发送广播});Android 8.0+ 的特殊处理对于 Android 8.0 (API 26) 及以上版本:必须为静态注册的接收器指定package3.2发送有序广播程序发送的广播可以被其他的应用程序接收发送有序广播需要修改主活动});使用 sendOrderedBroadcast,接收两个参数Intent和与权限有关的字符串。
2025-07-26 18:04:14
780
原创 【Android】ViewBinding(视图绑定)
是Android Studio 3.6推出的新特性,旨在替代(内部实现还是使用findViewById)。通过ViewBinding,可以更轻松地编写可与视图交互的代码。在模块中启用ViewBinding之后,系统会为该模块中的每个 XML 布局文件生成一个。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。
2025-07-17 20:07:42
819
原创 JAVA——反射
Java反射是Java语言的一种特性,它允许程序在运行时自我检查并对内部成员进行操作。这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。具体来说,反射机制允许在运行状态中:对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,并且能改变它的属性。Java反射机制的核心是在程序运行时。
2025-06-07 22:20:30
430
原创 JAVA——了解泛型的实现机制
类型擦除指的是通过类型参数合并,将泛型类型实例关联到同一份字节码上。编译器只为泛型类型生成一份字节码,并将其实例关联到这份字节码上。类型擦除的关键在于从泛型类型中清除类型参数的相关信息,并且再必要的时候添加类型检查和类型转换的方法。类型擦除可以简单的理解为将泛型java代码转换为普通java代码,只不过编译器更直接点,将泛型java代码直接转换成普通java字节码。类型擦除规则情况一:首先将所有声明泛型的地方都擦除,然后若定义该泛型的地方没有指定泛型上界,则所有该泛型类型的变量的数据类型。
2025-06-01 23:24:04
498
原创 JAVA——IO流
在学习IO流之前,我们首先需要学习的概念就是流。为了方便理解,我们可以把数据的读写操作抽象成数据在"管道"中流动,但需注意:1.流只能单方向流动2.输入流用来读取 → in3.输出流用来写出 → out4.数据只能从头到尾顺序的读写一次所以以程序的角度来思考,In/out 相对于程序而言的输入(读取)/输出(写出)的过程。而IO流对应的就是 InPut 和 Output,也就是输入和输出。
2025-05-25 14:50:50
680
原创 Java——创建多线程的四种方式
Java 提供了多种创建多线程的方式,每种方式都有其特点和适用场景。继承 Thread 类简单直接,适用于简单的线程任务;实现 Runnable 接口更加灵活,适合在已有类层次结构中使用多线程;实现 Callable 接口可用于需要获取线程执行结果的场景;使用线程池则可以高效地管理和复用线程,适用于需要大量线程处理任务的情况,并且可以通过合理配置线程池参数来优化系统性能。在实际开发中,需要根据具体的需求和场景选择合适的多线程创建方式,以充分发挥多线程编程的优势,提高程序的质量和效率。
2025-05-18 15:26:40
837
原创 Java——哈希表的实现
在Jav中,实现哈希表的功能的主要是和这两个类,它们都是Map的实现类。下面分别介绍这两个类的特点。1.a.键唯一,值可重复b.元素无序c.无索引2.a.key唯一,value可重复b.元素无序c.无索引一般而言,如果没有特别的需求,推荐使用HashMap。以下以HashMap为例介绍其常见用法和注意事项。
2025-05-11 00:17:36
933
原创 算法——回溯
回溯算法是一种通过穷举来解决问题的方法。它的核心思想是从一个初始状态出发,所有可能的解决方案,当遇到正确的解则将其记录,直到找到了解或者尝试了所有可能的选择为止。它采用的策略,在搜索过程中,当发现当前的路径无法得到解时,就会回溯到上一个状态,尝试其他的路径。它在DFS的基础上通过避免无效搜索。,只要有递归就会有回溯,而深度优先搜索也使用了递归。
2025-05-05 16:39:56
896
原创 实验室2025年第一次考核题解
当检索到的字符为],我们将 letter中的元素依次推出并记录为字符串,直到栈顶为[,此时表示[]内字符串已经全部读取到了,并且因 为栈先入后出,所以此时记录的字符串是反向的,要反转过来,之后将nums栈顶数字弹出,即为要重 复的次数,之后将解码后的字符串放回letter中。通过递归的方法我们可以发现,每一次循环的p,q都是上一次循环的q和temp,所以我们可以用递归的方法,将q作为新的p,temp作为新的q传入下一层。更新p为当前的q,更新q为temp,即两个指针向后移动一位,继续迭代。
2025-04-26 22:45:58
779
原创 Java——抽象和接口
抽象方法:接口中的方法默认为抽象方法,可不写public abstractpublic static final 数据类型 变量名=值 //即使不写public static final默认也有被final修饰的变量不能二次赋值,所以我们一般将final修饰的变量视为常量public default 返回值类型 方法名(形参){}public static 返回值类型 方法名(形参){}private的方法。
2025-04-26 16:03:20
585
原创 JAVA-继承
继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。继承是指在原有类的基础上,进行功能扩展,创建新的类型。单看定义可能会有些抽象,我们可以联想一下生活中的继承。生活中子女可以继承父母的财产,类似的,JAVA中的子类也可以继承父类的成员变量和成员方法。我们定义了多个类,发现这些类中有很多重复性的代码,所以我们就定义了一个父类,将相同的代码抽取出来放到父类中,其他的类直接继承父类,就可以直接使用父类中的代码,这样我们就大大减少了代码的重复性。
2025-04-20 15:12:45
759
原创 算法——DFS与BFS
深度优先搜索简单来说就是一条路走到黑。拿二叉树的前序遍历举例,我们遍历时从根节点向子节点遍历,先遍历左子树,再遍历右子树。如图,我们会从编号为1的节点开始,遍历2,5,到达末尾时回溯到2,6,再回溯到1...简而言之,就是我们一头扎进去,撞了南墙,我就退一步,但是决不放弃,在原基础上做出局部的改变去尝试第二条路,直到所有的情况我都试了,实在没有其他情况了,那我就回到1,从头出发,再做选择,再一头扎进去,直到成功。//前序遍历return;//访问优先级:根节点->左子树->右子树。
2025-04-13 15:00:02
739
原创 洛谷题解——C语言
所以如果我们吃掉第一个里的,只会减少一个分组的量,而如果吃掉第二个里的,可以减少2个分组的量。所以我们要尽量吃掉第二个里的糖果。处理好第一个分组后,来看第二个,因为第一个分组已经被处理好了,所以可以无视它,然后问题又变成了前一个问题。先输入,再用单价进行排序 先用一个tot记录当前数量,如果当前数量小于于等于所求数量,用sum记录当前所用钱数,因为用单价从小到大排了序,所以当当前数量大于所求数量时,此时的总价就是最小的钱数。先跳到最高的柱子,再跳到最低的柱子,再跳到次高的柱子,再跳到次低的柱子,……
2025-03-30 17:39:53
397
原创 初学JAVA
next()和nextLine()区别:next()遇到空格和回车结束录入,nextLine()遇到回车结束录入。在指定范围内随机一个数:nextInt(int bound)在0-(bound-1)随机。如果有变量,自动提升为int,然后再赋值给byte或short的变量,需要手动转换。静态初始化:数据类型[] 数组名=new 数据类型[]{元素1,元素2...}class:类,java程序最基本的组成单元,所有代码都需要在类中写。变量名.nextInt()->在int的取值范围内,随机一个整数。
2025-03-22 23:19:04
586
原创 数据结构--二叉树
是一种非线性数据结构,与链表类似,二叉树的基本单元是节点,每个节点包含值,左节点引用和右节点引用。每个节点都有两个引用,分别指向左子节点和右子节点,该节点被称为这两个子节点的父节点。当给定一个二叉树的节点时,我们将该节点的左子节点及其以下节点形成的树称为该节点的左子树,同理得右子树。
2025-03-15 23:08:54
409
原创 算法——计数排序,桶排序和基数排序
由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。桶排序最好情况下使用线性时间O(n),桶排序的时间复杂度,取决与对各个桶之间数据进行排序的时间复杂度,因为其它部分的时间复杂度都为O(n)。很显然,桶划分的越小,各个桶之间的数据越少,排序所用的时间也会越少。也是非比较的排序算法,对每一位进行排序,从最低位开始排序,复杂度为O(kn),为数组长度,k为数组中的数的最大的位数;是计数排序的升级版。
2025-03-09 00:18:30
474
原创 数据结构——哈希表
哈希表通过建立键(key)与值(value)之间的映射实现高效的元素查询。具体来说,我们输入一个key就可以在o时间内获取对应的value。相对于数组和链表,哈希表更为高效,o。
2025-03-01 23:01:17
400
原创 数据结构——栈基础(C语言)
栈是一种遵循先入后出逻辑的线性数据结构。堆叠元素的顶部称为栈顶,底部称为栈底,把元素添加到栈顶的操作叫入栈,删除栈顶元素的操作叫出栈。栈可以视为一种受限制的数组或链表。栈的常用函数有push()入栈 pop()出栈 peek()访问栈顶元素等。
2024-12-01 15:02:31
255
原创 反转链表的四种方法(c语言)
t保存q的下一个节点,防止反转时丢失链表信息。q->next=p将q的下一个指向p,实现反转。更新p为当前的q,更新q为temp,即两个指针向后移动一位,继续迭代。当q指向NULL是循环停止,此时p指向新的头节点,返回p。
2024-12-01 14:32:55
439
原创 基础算法-整数有序离散化和区间合并
在一个范围很大的数组内,分布着有限数量的数,去求解相应的问题。即用数字的相对值代替它们的绝对值,例如成绩与排名的关系。
2024-11-24 17:56:09
187
原创 高精度算法(乘除篇)
乘法结果的最大位数为两个乘数位数之和,并且经过归纳分析,我们发现储存两个数某两位的积的数组名为两者之和减一,并且要注意进位,最后消除前置0并输出结果。在进行乘法运算时,参考我们平时列竖式计算的过程,即将两个数的每一位都相乘再进行相加,并且要注意位数问题,且依旧是从低位向高位运算。因为是从高位向低位运算,所以不用把数字倒转,计算时要注意借位,消除前置0时要注意,输出时从不为0的第一位顺序输出。我们依旧参考竖式计算的过程,用逐步试商法从高位向低位一位一位运算。下面是除法的高精度算法。
2024-11-03 17:48:39
193
原创 c语言基础之高精度算法(加减篇)
我们来回想一下我们进行加减运算时是不是都是从低位数到高位数一步一步运算的呢,所以在用代码实现是也要从低到高一步一步计算。剩下来的操作与加法类似,注意减法运算结果最大位数为大数的位数,运算时不够要借位并且减法删除高位的0要用循环 ,最后记得负数输出时要输出负号哦。众所周知,计算机在计算时是有误差的,一旦数据过大,我们就无法直接计算。定义5个数组,a,b用来读入要计算的数字,a1,b1用来存储转置后的数字并转为整数类型,c1用来存储计算后的数字。因为我们在计算时是由低位向高位运算的,所以如图,将数字反转储存。
2024-11-03 00:45:49
309
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人