自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (2)
  • 收藏
  • 关注

原创 TreeMap源码解析(JDK1.7)

概念TreeMap是键值对按键有序,为了实现Key有序,要求Key实现Comparable接口或者构造函数传入Comparator来保证Key的顺序。相对于HashMap实现Map接口,TreeMap还实现了SortedMap和NavigationMap进一步提供总体顺序Map方法和扩展一些方法lowerXX,floorXX,ceilingXX,higherXX等导航方法来方便TreeMap操作。源码解析TreeMap底层原理实现是红黑树。首先红黑树一颗二叉搜索树或者叫二叉排序树,也就是其左子树,父

2021-03-25 18:20:42 135

原创 HashSet源码解析

概念HashSet基于Hash表的Set实现集合,Set定义了无重复且没有顺序的容器接口。源码解析HashSet是基于HashMap的一个实例进行实现,其不保证Set的迭代顺序,因此其源码实现相对简单。以下源码只涉及一些核心逻辑。字段属性 // HashMap实例 private transient HashMap<E,Object> map; // 虚拟值关联map实例的value值 private static final Object PRESENT = new Ob

2021-03-25 18:19:02 107

原创 HashMap源码解析(JDK1.7)

概念HashMap是基于Hash表的Map实现,提供所有可选的键值映射操作。底层实现是数组单链表实现,数组中的每个元素是一个链表节点,通过链表来处理hash冲突。源码解析源码解析只涉及到一些核心功能实现分析,不会对HashMap的所有源码进行展开。字段属性 // 默认HashMap容量 static final int DEFAULT_INITIAL_CAPACITY = 16; // 最大HashMap容量 static final int MAXIMUM_CAPA

2021-03-18 11:47:08 128

原创 LinkedList源码解析

概念基于双端链表的List,Deque接口实现。具有链表的高效添加、删除,但查找性能比较低下,需要从头到尾或者从尾到头遍历链表。源码解析源码解析只涉及到一些核心功能实现分析,不会对LinkedList的所有源码进行展开。字段属性// List容量大小transient int size = 0;// 首节点transient Node<E> first;// 尾节点transient Node<E> last;双链表节点结构使用内部类Node来定义链表的节点

2021-03-17 18:25:36 96 2

原创 插入排序

插入排序我们先抛开插入排序的定义和实现,从一个简单例子:插入一个元素到有序数组进行展开说明。插入一个元素到有序数组假设我们现在有一个有序数组[1,3,5],现在给你一个数字2,假定这个有序数组容量足够的情况下,如何将数字2插入到这个有序数组呢?一般我们可以得出如下的粗略算法步骤:寻找2在有序数组中的下标位置。将要插入的下标位置的元素及之后的元素往后移,为2腾出空间。将2插入到数组的下标位置。现在我们一个个分析这三个步骤的实现查找插入的位置查找元素要插入的数组的下标位置,我们有两种实现方

2020-09-24 15:38:52 140

原创 选择排序

选择排序在讲解选择排序算法前,我们先来讨论和实现下冒泡排序的第二种写法。冒泡排序的第二种写法我们在冒泡排序算法中讲到,冒泡排序的核心思想为:循环N轮,每轮在剩余数组中交换一个最大值到数组的末端,其代码如下:public static void bubbleSort(int[] array) { for (int i = 0; i < array.length - 1; i++) { for (int j = 0; j < array.length - 1 - i;

2020-07-03 17:35:18 105

原创 冒泡排序

冒泡排序我们先抛开冒泡排序的定义和其算法的步骤。我们从零开始一步一步来实现这个冒泡排序。交换两个元素假如现在给你一个简单的数组,它只有两个元素5和4。现在叫你把数组元素5和4的位置进行交换。那么我们很容易的可以写出如下经典交换代码:public static void swap(int[] array) { assert array != null && array.length == 2; int temp = array[0]; array[0] = ar

2020-06-19 18:23:48 252

原创 排序算法起始篇

排序算法开篇说明目的写这些文章是为了记录目前常见的排序算法及其背后的相关思想,对以前零散的知识做一个比较系统和完整的总结。说明为了把重心放置在排序算法核心思想上,不对排序算法的其他部分进行展开,如其算法的时间复杂度、空间复杂度等。为了最简单化的分析和实现代码,使用整型数组进行排序来讲解。当然排序算法适合一切可比较的对象,大家可以使用Comparable和Comparator来定义对象的比较规则来适应排序算法。文章部分大部分都是使用文字进行讲解,一切能用文字说明的部分都不想用图片和动态图来说明(

2020-06-18 15:14:26 1255

原创 Java编程思想08

对象的容纳程序设计过程中,为了方便容纳和操作对象, JAVA提供了多种方式。数组数组是JAVA内建的类型,作为容纳对象的一种方式。数组是相同类型元素的集合,内存中分配一块连续的内存区域,通过数组下标索引计算出元素对应内存区域的存储地址。数组可以高效的访问元素,但是数组的创建时就必须指定数组的大小。集合类集合类是一系列实现抽象数据结构的类集合,这些类为容纳和操作对象提供了不同形式的实现。常见数据结构数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系

2020-06-17 18:00:35 120

原创 LinearLayout的简单分析

LinearLayout的简单分析 本篇通过分析LinearLayout的实现机制来理解该怎么进行自定义组合View我们可能这样在xml中来使用LinearLayout<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.

2020-06-03 10:47:04 589

原创 ListView过滤搜索功能源码分析

近期维护联系人(Contacts)代码时,发现其中有个功能是根据你输入的字串来搜索出ListView相匹配数据的一项功能。鉴于网上大部分内容都是写其一些基本用法,本文分析ListView其搜索过滤功能的实现,让大家在使用过程中能够做到心里有底,正确的使用好这项功能。本文章分为两个主题ListView中怎么使用搜索过滤功能ListView搜索过滤功能的实现分析ListView中怎么使用搜索过滤

2020-06-03 10:33:06 1059

原创 Java编程思想07

多形性多行性也叫多态性是面向对象设计语言的第三种最基本的特性(抽象,继承,多态),多行性从另一个角度将接口从实施细节中分离了出来;实现了“是什么”和“怎么做”两个模块的分离。多行性跟类的"造型"和"绑定"技术息息相关。上溯造型将一个类的对象句柄当做其基础类的句柄来使用称为“上溯造型”(继承树的画法基础类位于上方)。“上溯造型”有助于代码的复用;当各类之间只有行为上的差异性,可以将各类进行“上溯造型”到基础类进行调用(基础类会根据“运行期的绑定”来确定来调用哪个类的方法)。绑定将一个方

2020-06-02 18:19:42 172

原创 Java编程思想01

面向对象面向对象概念面向对象的特性构建项目时需考虑的步骤面向对象概念万事万物皆为对象,可将对象理解为一种新的类型变量,它保存着数据和对本身进行的操作。程序是一大堆对象的组合:通过消息的传递,各对象知道自己该做些什么。为了向对象发出请求,需向对象“发生一条消息”(调用请求)。每个对象都有自己的存储空间,可以容纳其他对象。每个对象都有一种类型。根据语法,每个对象都是某个类的一个实例,类是

2019-02-19 15:00:27 342

原创 java编程思想06

类再生 java中为了代码的复用和再生,可以使用类继承和类合成的形式。类继承是指创建一个新类作为现有类的的一个“类型”;我们可以原样的采取现有类的代码,同时可以加上新代码而对现有类又不会产生影响。类合成是指在新类中创建原有类的对象,利用原有类的对象来操作原有类的代码,这只是一种简单重复利用代码的功能。类合成 通过类合成来达到类复用的过程中,需要注意几点类中的合成类的对象编译器并不会主动的

2016-09-01 16:43:33 396

原创 java编程思想05

隐藏实施过程 OOP(面向对象设计)的一条准则是:把变化的部分同不变的部分进行分割开;其设计原则是只为用户提供用户想用的接口和方法,对一些易于改动的方法和成员变量进行私有化。java访问控制符java中存在着4中访问指示符,可以有效的控制类成员和方法的访问权限,分别为public, “友好的”(无关键字), protected和private,其访问权限如下表: 指示符 本类 同包

2016-08-11 18:42:02 282

原创 java编程思想04

初始化和清除用构建器自动初始化java中使用构建器来初始化类的成员变量,构建器是一个同类名相同没有返回值的方法,jvm会默认给类提供一个无参的构造函数。如果我们重载了构造函数,默认的构建器就会失效方法的重载的区分是以参数的类型列表(参数的个数、参数类型、参数的顺序)来区分的。基本类型方法重载常数被当做int,若没有int的重载方法,则会对其进行转型处理(上溯转型)1-1. char会被转成

2016-08-11 14:31:46 259

原创 java编程思想03

控制程序流程Java运算符所以运算符都能根据自己的运算符对象生成一个值。一个运算符可可变运算对象的值,叫作“副作用”,运算符最常见的用途就是修改自己的运算对象,从而产生副作用,但是生成的值亦可没有副作用的运算符生成。几乎所有的运算符都只能操作“主类型”,唯一的例外是”=”,”==”,”!=”可以作用域所有对象。String类支持“+”,“+=”。运算符优先级运算符优先级决定了存在多个运算符

2016-08-11 14:31:09 291

原创 java编程思想02

一切都是对象用句柄操作对象在java中可将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“句柄”(Handle);但是拥有一个句柄,并不表示必须有一个对象同它连接: String s;这里只是创建一个句柄,并不是一个对象,若此时想s发送一条消息,就会获得一个错误(因为没有对象同它连接)。所以对象都必须创建创建句柄时,我们可以使用new来创建一个对象来同它进行连接。保存位置程序运气时,有

2016-08-11 14:30:26 284

原创 Android之SystemUI加载流程和NavigationBar的分析

Android之SystemUI加载流程和NavigationBar的分析 本篇只分析SystemUI的加载过程和SystemUI的其中的一个模块StatusBar的小模块NavigationBar,以Android6.0代码进行分析AndroidManifest.xml <application android:name=".SystemUIApplication" andr

2016-04-15 16:14:03 9396

android sqlite3 数据库操作大全

这个本来是为了自己通讯录项目所设计的,但因为某些原因,没有使用上,今天被我发现,删除可惜,特此把它贡献出来,里面数据库的增删改查各个方法我都写了,还有我在MainActivity对我所写的各个方法都写了测试实例,对sqlite3数据库操作不熟悉的人,可惜参照里面的方法进行学习。

2013-08-22

视频通话 sipandroid 开源项目源码

原来的网上的开源项目很多都跑不起来,这个项目,经本人修改,经测试在android4.0系统上运行已经没问题,研究了下,发现对需要做视频通话的人来讲还是有很大帮助,特此贡献出来,供大家研究学习,压缩文件是在linux下进行的。

2013-08-18

空空如也

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

TA关注的人

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