自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 内联函数let、also、with、run、apply的用法

let在函数体内使用 it 代替调用者访问其公有的属性和方法 val person = Person("fzh", 22) person.let { print("name = ${it.name}") }可以对一个可能为空的对象(object?)进行判空操作 val person = getPerson() // 如果person为null,将不会执行let块 person?.let { print("name

2020-06-17 16:34:11 1105

原创 Dijkstra(迪杰斯特拉)算法的 java 实现

迪杰斯特拉算法解决的问题是:在一个有向图中,求图中一个节点到其他所有节点的最短距离算法思路:每次选取一个离出发点最近且未标记的节点,调整出发点到以这个节点为中心的周边节点的最短距离。这个过程持续 n - 1 次,直到所有节点都遍历完毕。假设有一个这样的图(图片出处:Dijkstra算法Java实现):求节点 1 到其他节点的最短距离,代码实现如下:public class Tes...

2020-03-06 20:38:59 492

原创 ReentrantLock 源码分析

前言本文主要分析 ReentrantLock 是如何实现非公平锁和公平锁的源码版本为 jdk1.8构造方法ReentrantLock 通过在构造方法里传入 boolean 参数来决定锁是否是公平的。 public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSyn...

2020-02-11 15:44:37 248

原创 String 的 intern 方法分析

分析这几种情况(jdk 1.8):情况一: String str1 = new String("hel") + new String("lo"); // 并没有在常量池里创建 "hello" String str2 = new String("ja") + new String("va"); // 虽然这条语句没有在常量池创建 "java",但常量池之前已经...

2020-02-08 19:34:45 157

原创 通过隐式 Intent 启动其他应用程序的活动

前提是知道启动程序的包名、启动活动的类名、以及相应的 IntentFilter 匹配条件。调用方式如下: Intent intent = new Intent(); intent.setAction("com.feng.test2activity.main"); // 该活动的 action 过滤条件 String packageName = "com.feng.test...

2020-01-03 16:49:20 637

原创 ArrayMap 源码分析

文章目录概述主要属性构造方法putindexOfNull()indexOfremoveget参考概述ArrayMap 是 Android 的 API,它和 Java 的 HashMap 相比,虽然在查找效率上不如 HashMap(HashMap 查找的时间复杂度是 O(1), ArrayMap 查找的时间复杂度是 O(logn)),但是 ArrayMap 的空间消耗更小,它内部使用数组存储 h...

2019-12-19 19:43:15 325

原创 ConcurrentHashMap 源码分析(1.8)

文章目录概述主要属性主要内部类NodeForwardingNode构造方法一些重要方法Unsafe 方法initTabletransferputputValget参考概述ConcurrentHashMap 是一个加强版的 HashMap,它支持并发操作。比起 HashTable 直接锁住整个数组,ConcurrentHashMap 锁的粒度更细,锁的是单个数组元素,而且有些操作例如初始化,对数...

2019-12-16 20:00:38 193

原创 安卓显示或隐藏控件时附带动画效果

前言控件可以通过 setVisibility 方法进行显示和隐藏。默认情况下没有动画效果,直接显示和隐藏有时候显得比较生硬。带有动画效果的显示和隐藏更加优雅,例如在阅读小说时,点击小说弹出设置时,会伴随着滑动的动画。本文就通过这个例子来进行说明,先上效果图:实现下面说下如何实现。在 xml 中创建动画首先在 res 文件夹中新建 anim 文件夹,然后编写要实现的动画。对于上面的动...

2019-12-05 14:43:53 1349

原创 LinkedList 源码分析

概述LinkedList 底层的实现是双向链表,因而它改查的效率较低,而在增删方面,由于不用进行数据的整体移动,所以在中间进行增删时具有较高的效率。下面就从源码入手,对 LinkedList 的增删改查作进一步的了解。主要属性 // 元素个数 transient int size = 0; // 头结点 transient Node<E> fir...

2019-12-04 20:36:42 130

原创 Android 连接 MySQL 并进行基本的增删改查操作

准备工作导入 jar 包下载 mysql-connector-java 包(吃过亏的表示推荐 5.x.x 版本,8.x.x 版本会出现挺多问题的):mysql-connector-java 下载地址打开 AS,将 jar 包复制到 libs 文件夹下, 复制完后右键 jar 包,点击 “add as library”,将 jar 包导入相应 module如果导入的 mysql-conne...

2019-11-25 15:02:29 3501 6

原创 选择排序及其优化

一般的选择排序 public void selectionSort(int[] a) { int minIndex; // 记录每一轮的最小值索引 for (int i = 0; i < a.length - 1; i++) { // 选出最小值赋给 a[i],a[i] 前面的数都已排好序 minI...

2019-11-18 16:30:00 990 3

原创 冒泡排序及其优化(三种优化)

文章目录普通的冒泡排序优化一:设置标志位优化二:设置结束边界优化三:双向冒泡排序最终优化:优化一 + 优化二 + 双向冒泡写在最后参考普通的冒泡排序 public void bubbleSort(int[] a) { for (int i = 0; i < a.length - 1; i++) { // 外层控制循环次数 for (in...

2019-11-17 21:38:27 6015 2

原创 Android 利用 shape 实现背景颜色渐变

通过 shape 中的 gradient 可以实现颜色渐变,例如:<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient a...

2019-11-17 12:09:28 1964

原创 安卓高斯模糊的实现

文章目录前言使用 RenderScript 实现高斯模糊RenderScript 配合 Glide 实现高斯模糊参考前言在 Android 中,实现高斯模糊效果的主要方式有:Java:FastBlur.java,由于在 Java 层做处理,效率较低。Android:RenderScript,原生 API,在 C/C++ 层做处理,效率较高。对比后不难发现 RenderScript 是...

2019-11-14 21:10:14 1257

原创 Android 5.0 以上将图片延伸到状态栏的方法

小米 9.0 亲测有效首先附上效果:实现方式:在 styles.xml 中设置相应 Activity的主题: <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- 其他设置 --> <!-- 隐藏标题栏和设...

2019-11-14 18:06:24 2107

原创 安卓 SQLite 数据库删除前 n 条记录

删除前 n 条记录对应的 SQL 语句是:delete from table where id in(select id from table order by id limit n)其中 table 对应表名,id 表示自增 id。在 SQLite 中执行以下代码即可: String sql = "delete from " + TABLE_NAME + "...

2019-11-12 16:43:11 1978

原创 FlowLayout(流式布局)的实现

文章目录前言代码实现(Flowlayout)使用方法1. 编写 item 布局2. 编写 Adapter3. 主活动中使用 FlowLayout参考前言最近在做的项目决定用流式布局来展示历史记录,刚好自己也想学习自定义 ViewGroup,所以就参考了其他的一些文章,写了一个 FlowLayout(流式布局),效果如下:代码实现(Flowlayout)只有一个 FlowLayout 类,...

2019-11-10 22:12:27 18829 3

原创 并查集的实现及应用(使用 Java 语言)

文章目录简介用数据结构来实现并查操作初始化查找合并优化按秩合并路径压缩应用LeetCode 第 547 题:朋友圈题目描述示例注意代码实现参考简介并查集(Union-Find)是一种树形的数据结构,用于处理一些不相交集合的合并及查询问题。从它的名字“并查”可以知道它包含了两个操作:合并和查找。合并:将两个不相交集合合并成同一个集合。查找:确定元素属于哪一个集合。一般来说,一个集合用一个元素...

2019-11-10 09:22:56 419

原创 马拉车(Manacher)算法的说明和实现(使用 Java 语言)

简介了解马拉车算法的作用前,先要知道回文字符串的概念。回文字符串是指无论正着读还是反着读,结果都是一样的字符串。例如 aba、abba 都是回文字符串。马拉车算法就是用来求一个字符串中的最长回文子串。例如 LeetCode 的第五题“最长回文子串”。算法思路马拉车算法的思想和中心扩展算法类似,也是求每个中心点向外扩展得到的最长回文子串长度,所有中心点中最长的回文子串就是要求的结果。但是中...

2019-11-06 17:07:07 692

原创 仿掌阅实现 TabLayout 切换时的字体和 Indicator 动画

文章目录前言分析实现字体缩放动画实现 Indicator 的长度变化动画一、准备工作二、让 TextView 撑满 TabView三、实现滑动时 Indicator 的动画效果写在最后参考前言最近在做的一个小说阅读 APP,打算模仿掌阅实现 TabLayout 切换时的动画效果。首先看下掌阅的切换效果:接下来是我的实现效果:分析切换动画主要有两部分组成:字体的缩放动画:进入页面...

2019-11-03 22:02:24 2289 9

原创 ViewPager.PageTransformer 的 position 分析

文章目录前言ViewPager.PageTransformer 的定义理解 position小结 position 的变化规律参考前言PageTransformer 是 ViewPager 内部定义的接口,实现该接口并通过 setPageTransformer 方法设置后可以实现自定义的 ViewPager 滑动效果。ViewPager.PageTransformer 的定义首先看下该接口...

2019-11-03 19:59:40 588

原创 RecyclerView 实现不固定列数的网格布局

RecyclerView 实现网格布局是通过设置 GridLayoutManager 来实现的,通常是这样设置的: mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));这样设置的效果是每一行都有 3 列,很对称。但如果我想要不同行有不同的列数,例如第一行只有一列,而其他行有 3 列。可以这样做: Gri...

2019-10-28 17:59:42 3401 1

原创 解决 Fragment 重叠问题

Fragment 重叠问题的产生因为某些原因(例如旋转屏幕)而导致 Activity 发生重建时,Fragment 也会发生重建。重建的 Fragment 如果没有保存状态,那么它的 mHidden 默认为 false,即 hide 失效,这时所有添加到容器的 Fragment 都会显示出来,就产生了重叠现象。解决问题要解决 Fragment 的重叠问题,关键是要在 Activity 发生重...

2019-10-21 17:18:16 701

原创 FragmentTransaction 的 replace, add, hide, show 的使用和区别

引入现在 APP 的主页面大多采用“单 Activity + 多 Fragment”的形式。多 Fragment 的使用需要解决两个问题:Fragment 怎么依附在 Activity 上Fragment 间的切换对于第一个问题,可以利用 FrameLayout 来解决,FrameLayout 可以作为承载 Fragment 的容器,又可以成为 Activity 布局的一部分,这样就可...

2019-10-20 19:45:48 5208 2

原创 揭露动画(RevealAnimator)的基本使用

前言揭露动画是 Android 5.0 的新特性,使用该动画后,在显示或隐藏视图的时候能够给用户提供视觉连续型。效果先上最终的效果图,毕竟只有当你对动画效果感兴趣的时候,才会认真地看它的代码实现。由于是在模拟器上运行,可能有点卡顿,在真机上效果会更好API在讲代码实现前,先介绍下实现揭露动画的 API:ViewAnimationUtils.createCircularReveal 方...

2019-10-19 15:41:38 927 1

原创 创建揭露动画时发生异常“Cannot start this animator on a detached view“

问题的出现我在 onCreate 中调用了一个 initShowAnim() 方法,该方法为 mImageIv(一个 ImageView) 创建揭露动画: @Override protected void onCreate(Bundle savedInstanceState) { // ... initShowAnim(); ...

2019-10-19 10:42:26 1204

原创 md 语法之表格:对齐和换行

对齐下面将对齐"数量"列的元素:左对齐md 写法:硬币 | 数量--- | :---五毛 | 3一角 | 5效果:硬币数量五毛3一角5居中md 写法:硬币 | 数量--- | :---:五毛 | 3一角 | 5效果:硬币数量五毛3一角5右对齐md 写法:硬币 | 数量--- | ---...

2019-10-18 09:47:38 10795 1

原创 Activity 的启动:四种启动模式及各种 FLAG

文章目录启动模式简介预备知识四种模式概述活动生命周期的变化添加 FLAG 后对 Activity 启动的影响Intent.FLAG_ACTIVITY_NEW_TASKIntent.FLAG_ACTIVITY_CLEAR_TASKIntent.FLAG_ACTIVITY_SINGLE_TOPIntent.FLAG_ACTIVITY_CLEAR_TOP参考启动模式简介Activity 有四种不同的...

2019-09-15 17:36:08 739

原创 RecyclerView 源码分析(二):布局

文章目录前言onMeasureonLayoutRecyclerView#dispatchLayoutStep1RecyclerView#processAdapterUpdatesAndSetAnimationFlagsRecyclerView#dispatchLayoutStep2LinearLayoutManager#onLayoutChildren1. 找到锚点(auchor 点)update...

2019-08-06 15:01:43 437

原创 RecyclerView 源码分析(一):Recycler

文章目录前言RecyclerView.Recycler主要成员变量RecycledViewPool成员变量主要方法getScrapDataForTypesetMaxRecycledViewsgetRecycledViewputRecycledViewViewCacheExtension主要方法getViewForPositionrecycleView补充mChangedScrap 和 mAttac...

2019-08-04 18:46:58 276

原创 ListView 源码分析

文章目录前言RecycleBin类注释主要成员变量主要方法onLayoutAbsListView#onLayoutListView#layoutChildrenListView#fillFromTopListView#fillDownListView#makeAndAddViewAbsListView#obtainView第二次 layoutListView#layoutChildrenListV...

2019-07-31 18:44:15 414

原创 Service 的生命周期

Service 的生命周期回调主要有这些,onCreate、onStartCommand、onDestroy、onBind、onUnbind、onRebind。根据启动方式的不同,回调又会有不同的顺序,下面列举一下各种情况下,回调的顺序:单种方式启动分两种情况:使用 startService 启动 Service。其生命周期为:onCreate -> onStartCommand...

2019-07-23 20:16:56 985

原创 okio 的使用及源码分析

文章目录简介一些重要的类ByteString 和 BufferSource 和 SinkRealBufferedSource 和 RealBufferedSink简单使用读取文本写入文本源码分析Segment成员变量构造方法poppushwriteTocompact(压缩机制)split(共享机制)SegmentPooltakerecycleBufferreadBytewriteByte超时机制T...

2019-07-22 15:06:54 435

原创 ThreadPoolExecutor 源码分析

文章目录前言源码分析crlWorker构造方法的参数execute(提交任务)addWorker小结下execute的步骤执行任务runWorkergetTask小结下执行任务的步骤参考前言ThreadPoolExecutor是线程池的默认实现,在使用线程池的时候,如果没有特殊要求,则直接创建ThreadPoolExecutor。如果有特殊要求,则直接继承ThreadPoolExecutor,...

2019-07-11 14:05:50 147

原创 源码分析:View的工作流程

文章目录简介View的工作流程入口DecorView被加载到Window中ActivityThread#handleLaunchActivityActivityThread#handleResumeActivityWindowManagerImpl#addViewWindowManagerGlobal#addView小结开始View的工作流程ViewRootImpl#performTraversa...

2019-07-03 17:11:41 244

原创 源码分析:View的事件分发机制

文章目录前言源码分析Activity#dispatchTouchEventViewGroup#dispatchTouchEventView#dispatchTouchEventView#onTouchEvent小结参考前言事件分发就是将MotionEvent事件分发给一个具体的View来处理的过程。本文将对Activity、ViewGroup和View的dispatchTouchEvent方法...

2019-06-23 21:07:19 288

原创 记一次byte[]和Bitmap的转换问题

在利用Socket传输图片的时候,用到了byte[]和Bitmap的相互转换。问题是这样的:首先将自己的Bitmap转换为byte[]传给对方,而对方在收到byte[]后转换为Bitmap,但是明明自己的Bitmap不为null,而对方转换后的Bitmap却为null。我就去找原因,刚好看到有篇文章说这样将byte[]转为Bitmap有问题return BitmapFactory.decode...

2019-06-11 16:52:36 4495 1

原创 TabLayout去除点击时的阴影效果

一开始看到一些文章说设置属性app:tabBackground="@android:color/transparent",但我试了之后,发现没有效果。后来受到这篇文章的启发,觉得应该是设置ripple,所以设置了属性app:tabRippleColor="@android:color/transparent",运行后发现真的有效,在这里分享一下这个方法。...

2019-06-09 15:46:25 4239 3

原创 Boardcast Receiver 源码分析:广播的动态注册、发送和接收过程

文章目录动态注册过程ContextWrapper#registerReceiver(以下代码基于API26)ContextImpl#registerReceiverContextImpl#registerReceiverInternalLoadedApk.ReceiverDispatcher#getIIntentReceiverActivityManagerService#registerRece...

2019-06-06 15:45:28 597

原创 LeetCode第56题:合并区间(Java实现)

文章目录题目示例解题思路代码实现题目给出一个区间的集合,请合并所有重叠的区间。示例示例1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 ...

2019-05-27 14:38:50 2049

空空如也

空空如也

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

TA关注的人

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