自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 一个由kotlin继承引起的空指针异常

我们先看如下代码:open class Parent(open var name: String) { var nameLength: Int init { nameLength = name.length }}class Child(override var name: String) : Parent(name) { init { nameLength = name.length }}fun main(args:

2021-06-19 14:15:16 254

原创 Android基础补完系列之Handler

今天我们来一起学习下Android基础里的Handler。Handler的工作流程是:Handler发送Message消息到MessageQueue,然后通过Looper的不停轮询从MessageQueue里取出消息执行,下面我们来分别看这几个步骤。文章目录Looper的创建以及轮询的开始Handler发送Message到MessageQueueMessageQueue将消息入队Looper的轮训处理消息MessageQueue取消息逻辑Looper的退出同步屏障IdleHandlerLooper的创

2020-11-23 22:32:33 639 1

原创 寻找二叉树两个节点的公共父节点

思路很简单,从根节点开始查询这两个节点,如果当前查到的节点是两个目标节点之一,直接返回,然后如果两个节点都位于父节点左边或者右边,递归,否则直接返回。public class Main { private static BinaryTree<Integer> getPublicParent(BinaryTree<Integer> rootTree, BinaryTree<Integer> tree1, BinaryTree<Integer> tre

2020-11-04 09:52:48 2057 3

原创 class文件的简单解析

字节码简介由于计算机只认识0和1,所以我们的代码要翻译成0和1组成的二进制文件才能被计算机执行,确切来说,是翻译成计算机能够识别的机器码才能被计算机所识别,然而不同操作系统的机器码并不是相同的,所以代码编译而成的二进制文件在其他的操作系统里并不难被识别,为了解决这个问题就出现了Java:Write Once,Run Anywhere。他的解决方式是在二进制文件和操作系统直接抽象出一层java虚拟机,代码编译而成的二进制文件能被虚拟机识别,然后虚拟机再去跨平台实现,这样的二进制文件——class文件就能够

2020-07-13 23:02:38 513

原创 有趣的ui效果——随列表移动的小飞机

前言这篇文章的起因是,群里一个小伙伴去面试时被问到一个效果如何实现:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7POiiFUz-1586686264261)(https://wanandroid.com/blogimgs/81c87faf-49e4-4041-80c8-9e188d1390c4.gif)]后来鸿洋看到后,就把这个效果放到wanandroid...

2020-04-12 18:12:51 895 1

原创 hash(key)的作用

问题今日一问:我们知道,Object类的hashCode()函数是用来在哈希表里将对象映射成int值的,然后根据这个int值计算出哈希值从而确定其在哈希表里的位置,在Hashtable里能看到他是这么做的:int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % tab.length;但是在HashMap里,stati...

2020-01-12 23:45:33 4214

原创 关于避免反射对逻辑的影响

问题今日一问:我们知道,Java的反射可以获取到系统里的对象之后,进而去调用这些对象的方法,甚至去修改对象的属性值,那么今天的问题是:我们在编写类的时候,如何写出受反射影响比较小的代码。简单来说就是在被反射调用的时候,更少的出现闪退,逻辑混乱等情况。更进一步,这些对我们的日常编码有什么启示。答案首先,我们看反射能够干什么事:自由调用构造方法创建对象;自由调用对象的方法;自由修改对象的...

2020-01-12 23:45:05 236

原创 链表有环的判断

问题今日一问:我们知道,在一个链表里,如果某一个节点的next属性指向了链表的另一个节点,那么这个链表就是有环的。 那么今天的问题是:如何判断一个单链表是有环的。一个有环的链表会给程序带来什么样的隐患。提示:你可能会想到在链表里选取一个节点,然后对链表进行循环,如果循环到了这个节点就说明链表有环了,但是这个办法的问题是如何确保选取的节点在链表里,如果有办法确定这点,实际上就相当于判断了链表是否...

2020-01-12 23:44:14 164

原创 比较排序的下限讨论

对于n个任意数的排序,我们现在只通过比较大小的方式来对其进行排序。我们知道这个排序问题的时间复杂度的下限是nln(n),也就是说对于任意的基于比较的方式来排序的算法,不可能有时间复杂度小于nln(n)的排序方法。那么这个下界是如何的出来的呢?考虑n个数的大小排列方式,一共有n!种排列。不用考虑这n个数有相同的情况,那样只会使排列数量小于n!,再者,我们排序如果要保持相同数字的顺序,也就是...

2020-01-06 23:28:46 663

原创 一道算法题引申的链表实现大数运算

先来看一道LeetCode的题目:2. 两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -...

2020-01-05 21:59:33 276

原创 数据结构与算法之从哈希表到HashMap(二)

HashMap的基本结构HashMap是基于哈希表的键值对存储类,它通过将键值对包装成Entry,然后根据键的hash值确定保存的位置。下面我们先看HashMap里几个重要的类与变量。Entry类static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key;...

2019-12-29 23:29:26 107

原创 数据结构与算法之从哈希表到HashMap(一)

哈希表的介绍数组和链表在保存数据的时候,一般不会对数据的性质来决定数据存放的顺序,所以他们在查询数据的时候,只能够通过从前往后遍历,从而查找到想应的数据;例如在一个int数组[12,34,56,324,24387]里查询是否存在关键字324时,我们只能够从第0位往后查询,然后查询到324,他的效率是o(n);链表也和数组类似。对于二叉搜索树和红黑树,他们是根据数据的大小来保存数据的,利用...

2019-12-15 22:13:52 198

原创 数据结构与算法之详解数组和链表

数组的基本特性数组是一种常用的数据结构,他是在内存中开辟出一串内存空间来保存数据,对他的数据的访问可以直接通过下标来完成。但是由于数组的每一个元素的内存地址是明确的,所以数组里添加或者删除元素,通常伴随着之后的元素的整体前移或者后移。例如,将数组的第0位从数组删除,要将后面的每一位都往前移到一位。而且数组是在创建的时候就已经确定了大小的,之后如果要扩容,必须要在内存中重新找到新容量大小的连续...

2019-11-24 21:50:17 85

原创 MD5加密浅析

文章目录MD5加密的概念MD5加密的简单使用第一步第二步第三步MD5加密的实用场景用户密码接口签名文件一致性校验MD5加密的安全与破解MD5加密的概念MD5加密是一种常用的信息摘要算法,主要用于保证数据的一致性以及签名验证,他是一种不可逆的加密算法。MD5加密是将任意的字节数组加密成32个字节的数据,然后他们在形式上表现为32位的16进制数。MD5加密的简单使用我们来看下MD5加密在Ja...

2019-11-17 23:11:23 920

原创 数据结构与算法之详解二叉树排序

二叉树(堆)的概念二叉树(堆)是一种结构:每个节点均可有两个子节点,如此形成的一种倒立形树形结构,而一个数组也能够看成二叉树,二叉树的每一个节点均看成数组的一个元素。 10 23 25134 135 9如图示的二叉树对应于数组[10,23,25,134,135,9]。如果堆的每一个节点均比他的两个子节点大,我们就称这个二叉树为最大堆。如果对于一个节点i...

2019-11-10 21:07:18 250

原创 Java基础补完系列之反射

反射的基本使用Java的反射机制是在运行期,对于任意的一个类,都能够知道改类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;能够通过一个类的字符串名字获取这个类的信息,根据方法的名字去调用方法,这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。Java的反射主要是如下几个类:类名作用Class对应于Java的一个类Method...

2019-11-03 21:43:07 96

原创 Java基础补完系列之动态代理

动态代理的基本使用动态代理是Java的一种基本技术手段,他能在运行期对一个对象的一些方法做一些修改,而得到一个新的对象,而不需要预先定义好对应的对象的class,下面我们先来看一下代理模式的简单使用方式:先定义好一个接口:public interface IPrint { void print();}然后在定义这个接口的实现类:public class Person impl...

2019-10-27 22:19:31 149 2

原创 Java基础补完之数值与位运算符

Java的位运算符是指针对二进制数的每一位进行运算的符号,他在运算的时候不关心数据的实际含义(是正数还是负数,等等),而是直接根据数据数据在内存的保存形式来计算的,它是Java基础中的基础,而大部分开发人员对这个不甚了解,所以本文来介绍它的一些基本使用。文章目录原码反码补码的概念Java数字在内存中的存储形式整型在 Java的内存形式浮点型在 Java的内存形式float和double的精度问题...

2019-10-20 21:45:50 972 1

原创 DataBinding从使用到放弃

DataBinding是谷歌官方发布的一个框架,基于页面数据直接绑定的mvvm框架,最初接触其时被惊艳到了,其可以在xml文件直接绑定数据,通过Binding类直接拿到有id的控件,页面对数据的监听可以直接修改数据就能改变页面的数据,即使页面有多处使用到。但我现在决定弃用他了。下面一一列出理由。1.编译延迟2.无用功能多3.布局文件复杂4.多模块开发1.编...

2018-07-30 16:57:47 1866

原创 阿里路由框架ARouter简介

Android的页面跳转一般是用intent直接指定组件名来完成,可是再多模块开发的时候,这种方式会使各模块耦合严重,代码过多侵入,不能达到模块完全分离的目的,这个时候就需要使用隐式intent来完成页面的跳转,也就是页面路由。ARouter就是一个Android的路由解决方案。简单使用1.添加依赖和配置android { defaultConfig { ......

2018-07-29 11:34:36 547

原创 Android Notification点击按钮改变内容方案

最近做项目的时候,遇到一个需求:发送一个带加减按钮和一个数字的通知,点击按钮后,通知的数字相应的要改变。听起来很简单,不就是给两个按钮添加点击事件就可以了吗。可是,通知并不属于App的进程,而是Android系统维护的进程

2017-09-11 15:30:26 2270

原创 DataBinding的使用——换肤方案的实现

在学习了DataBinding框架后,就想着这个方案在一些场景下的运用,于是根据这个框架的特性,写出了一个换肤的方案.

2017-09-11 11:10:08 1541

原创 Android 官方框架DataBinding学习笔记

DataBinding是谷歌官方发布的一个框架,它的目的是降低布局和逻辑的耦合性,使代码的逻辑更清晰。它能够很简单的省去findViewById()的步骤,大量减少Activity的代码,数据直接能写在layout文件上,而且它能自动进行空检测,很多地方对象为空不会引起空指针异常。

2017-09-11 11:08:49 769

空空如也

空空如也

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

TA关注的人

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