自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android---ArrayMap

ArrayMapArrayMap是Android中提供的另外一种容器,用来替代HashMap。上一篇文章已经讲过了,HashMap的内存浪费,而SparseArray,利用两个数组分别记录Key和Value。通过二分查找来查找Value。但SparseArray的Key只能是int类型,而ArrayMap,则解决了这个问题,Key支持任何数据类型。ArrayMap的重要成员变量...

2019-10-11 17:47:19 325

原创 http协议

http协议http协议是处于应用层的一种协议。网络总共分为7层,如下图我们经常提到的http协议就是最顶层的应用层的一种协议,也是基于TCP/IP的一种协议。还有两个概念,也经常提到的,UDP和TCP/IP,这两个协议是处于传输层协议,UDP效率高,不可靠,TCP三次握手等等,在这里不做讨论。我们经常使用浏览器访问网页,使用App查看新闻等等等等,所有的网络数据归...

2019-10-10 10:34:31 236

原创 线程池(Java)

线程池线程池,其实就是一个线程的缓冲池。它可以有效的降低创建、销毁线程的开销。维护一些线程在线程池内,方便使用。线程池的核心参数:int corePoolSize 线程池核心线程数量 int maximumPoolSize 线程池最大线程数量 long keepAliveTime 临时线程运行完毕后的存活时间 TimeUnit unit 存活时间单位 BlockingQueue...

2019-10-09 16:46:09 208

原创 Android---SparseArray

SparseArray在Android API里,Google提供了一种替代HashMap<Integer, E>的数据结构,这种数据结构就是SparseArray。先来回顾下HashMap,HashMap是由 数组 + 单向链表 组成的容器,默认大小为16,每次put时算出index,然后放入数组内,这样造成的问题就是内存中数组元素不是连续的,而是散列的,因此浪费了内存。...

2019-10-09 14:20:37 170

原创 集合框架(Java)之Set

SetHashSet内部维护的其实就是一个HashMap,只是只存储key值,而没有value。因此也是基于 数组 + 单向链表的结构。 LinkedHashSet内部维护的其实是一个LinkedHashMap,因此是数组 + 单向链表 + 双向链表的结构。 TreeSet内部维护的其实是一个TreeMap,因此是平衡二叉树的数据结构。...

2019-10-09 11:34:39 112

原创 集合框架(Java)之Map的迭代以及性能对比

Map的迭代以及性能对比上三篇文章分析了三种Map的数据结构和增加删除操作。HashMap是基于 数组 + 单向链表的数据结构,通过hash算法算出Index位置,如果没有旧元素直接存储,如果有,则进行hashCode比较和equals比较,如果一样覆盖久值,不一致则链表链接下一个元素。LinkedHashMap是基于 数组 + 单向链表的数据结构,并且又维护了一个双向链表来保证元素的...

2019-10-09 11:29:30 406

原创 集合框架(Java)之TreeMap

TreeMapTreeMap是Map框架下的最后一个Map。他的数据结构为平衡二叉树(也叫平衡红黑树)。TreeMap是一个可以保持key高有序性的容器,他存储的也是键值对。底层是平衡二叉树结构。二叉树,有左右两个子节点,在根节点的左边,都是小于根节点的节点,而根节点的右边都是大于根节点的节点,因此保持了有序性。而平衡二叉树的意思,就是说,在根节点的左右两边都尽量保持相同数量的节点...

2019-10-09 11:18:14 212

原创 集合框架(Java)之LinkedHashMap

LinkedHashMap在上一篇文章中,介绍了HashMap的数据结构,是由数组 + 单向链表构成的,那么HashMap的这种散列元素的数据结构,也就注定它是无序的,因为每次算出的Index,都不是连续的,而是随机的,所以注定在迭代元素的时候,元素的取出顺序和存放顺序,是无序的。LinkedHashMap则是解决无序的这个问题的。LinkedHashMap继承自HashMap,并且内...

2019-10-09 07:42:01 167

原创 集合框架(Java)之HashMap

HashMapHashMap也是一种容器,是数组 + 单向链表的数据结构。HashMap能够存放键值对,即 Key - Value 的存储方式。package com.evan.hash_map;import java.util.HashMap;import java.util.Map.Entry;import java.util.Set;public class Dem...

2019-10-06 13:31:41 148

原创 集合框架(Java)之Iterator和ListIterator

Iterator和ListIterator在上两篇文章中,我们介绍了ArrayList和LinkedListArrayList是基于数组的数据结构,增删改查都依赖Index去完成。因此修改和查看效率高,增删涉及到数组的扩容,因此效率较低。LinkedList是基于双向链表的数据结构,增删特别快,但改和查每次都需要遍历整个链表,因此效率低。ArrayList的遍历package...

2019-10-06 10:34:02 300

原创 集合框架(Java)之LinkedList

LinkedListLinkedList是List下的一个集合子类,数据结构是基于双向链表。双向链表的意思就是元素一个接一个的链接上去,例如有一个LinkedList, 有3个元素,第一个元素记录第二个和第四个元素的内存地址,第二个元素记录第一个和第三个元素的内存地址,第三个元素记录第一个元素的内存地址。就这样我们称之为双向链表。看一下LinkedList的成员变量 t...

2019-10-06 10:05:04 141

原创 集合框架(Java)之ArrayList

ArrayList详解集合就是一个容器,在Java中提供了很多容器API,而数组就是最基础的容器。Java中的集合框架分为3大部分,即List、Set、Map今天先来看List体系下的一个基于数组的容器,ArrayList。ArrayList的数据结构基于数组。我们翻看ArrayList的源码,先查看它的成员变量。​public class ArrayList&l...

2019-10-06 07:29:29 177

原创 多线程(Java)之死锁

多线程之死锁死锁,是指有多个线程和多把锁,而造成的某个线程持有另外一个线程的锁,另外线程也持有此线程的锁,而造成的假死状态。比如我们有A,B两个线程,有A,B两把锁A线程进入到了B锁的同步代码块,持有了B锁,现在要进入A锁的同步代码块B线程进入到了A锁的同步代码块,持有了A锁,现在要进入B锁的同步代码块这个时候双方都持有对象想要的那把锁,而不肯放手。因此造成了死锁的假死状态。...

2019-10-05 13:53:13 287

原创 多线程(Java)利用Lock接口实现多生产者多消费者

利用Lock接口实现多生产者多消费者在上一篇文章中,我们介绍了等待唤醒机制里的notifyAll方法,并编写了多生产者和多消费者的代码示例。但有一点,因为我们在使用wait()方法后,将4条线程睡眠,我们在生产完毕后,需要使用notifyAll()方法,来唤醒所有的线程,因为notify()方法是唤醒当前对象池子里随机一条线程,我们无法保证唤醒消费者线程的其中一个。本篇文章,我们介绍利...

2019-10-05 13:40:03 234

原创 多线程(Java)等待唤醒机制之多生产者与多消费者示例

多线程之多生产者与多消费者在上一篇文章里,我们介绍了线程的等待唤醒机制,并用单生产者和单消费者来演示了notify() 和 wait() 等待唤醒相关方法。这篇文章我们来通过多生产者和多消费者来演示notifyAll()的方法。我们要实现的效果原理为上图,我们有两个生产者线程,在isProduce = false时,在P1和P2线程中随机一条线程来进行生产商品,生产完毕后,再在C1...

2019-10-05 13:16:12 273

原创 多线程(Java)等待唤醒机制之消费者生产者示例

多线程之等待唤醒机制前面多线程的文章中,我们提到了线程状态,有一个状态是WAITING状态,也就是等待状态。这个状态是指调用了Thread.wait(); 方法后线程失去CPU的执行资格,CPU就算做着随机切换,也不会切换到该线程,只有使用了notify() 方法唤醒了此线程,该线程才能重新获得CPU的执行资格。而wait() notify() notifyAll() 其实是Objec...

2019-10-05 12:32:20 283

原创 多线程(Java)之volatile关键字

多线程之volitile关键字先来看一段测试代码。package com.evan.counter;public class Test { public static void main(String[] args) { MyRunnable runnable = new MyRunnable(); Thread t1 = new Thread(runnable); ...

2019-10-05 11:09:26 199

原创 多线程(Java)之Lock接口

多线程之Lock接口上一篇文章讲述了多线程的概念和同步代码块来解决多线程造成的问题。https://mp.youkuaiyun.com/postedit/102060855如果想要解决多线程访问多行代码涉及操作同一变脸造成的问题时,在JDK1.5之后推出了新的API来解决这个问题。就是Lock接口将上一篇文章里的synchronize替换为Lockpackage com.evan.c...

2019-10-04 19:47:15 175

原创 多线程(Java)

多线程概念: 1. 进程 ---> 指编写好的程序,在设备中运行起来后,所属的那片内存空间。 2. 线程 ---> 指程序运行时,负责执行指令的执行器。package com.evan.counter;public class Test { public static void main(String[] a......

2019-10-04 17:27:43 358

原创 二分查找(Java实现)

二分查找概念:二分查找是一个可以快速查找出目标元素的算法。前提:二分查找需要在有序数组中使用。核心思想:先找到数组中中间的元素,如果要查找的元素比中间元素小,则排除中间元素右侧的所有元素,如果比中间元素大,则排除左侧所有元素。 然后递归再对剩下的元素进行二分查找。示例代码:package com.evan.binary_search;import java.util....

2019-10-02 16:42:03 2098 1

原创 归并排序(Java实现)

归并排序假如我们有两个有序数组,我们需要合并到一个数组里,并且重新进行排序。A数组: [1, 23, 5, 37, 9, 99, 201]B数组: [12, 4, 6, 18, 100]介绍第五种排序算法:归并排序前提:两个数组必须有序。核心思想:创建一个新数组,容量为两个数组的长度和。 遍历A,B两个数组中的元素,进行比较,较小的先放入新数组中,较大的后...

2019-10-02 16:29:17 241

原创 插入排序(JAVA实现)

插入排序假如我们要对以下数组进行排序:{3, 2, 1, 52, 67, 21, 5}介绍第四种排序算法,插入排序。核心思想:我们将这个数组看成两部分,从Index 1作为分割线,左边是有序部分,右边是无序部分。 我们从Index 1,开始,将元素拿出来,然后逐个和左边的元素进行对比、排序。 例如上面的数组,我们将元素2拿出来,用一个temp变量记录,然后和左边Index ...

2019-10-02 13:29:11 193

原创 快速排序(Java实现)

快速排序我们要对下面这个数组进行从小到大排序数组如下:{12, 32, 4, 78, 1, 14, 78, 51, 13, 98, 10, 64, 101, 3}介绍第三种排序算法,快速排序。核心思想:我们先拿角标 0 上的元素作为基准数,然后从右边开始像左边检索,发现一个比基准数小的元素后,将角标停下来,然后再从左边开始向右边检索,发现一个比基准书大的元素,将角标停下,然...

2019-09-29 16:39:08 363

原创 冒泡排序(Java实现)

冒泡排序假如我们要将以下数组有小到大进行排序:int[] array = {12, 32, 4, 78, 1, 14, 78, 51, 13, 98, 10, 64, 101, 3};介绍第二种排序算法 ---》冒泡排序原理讲解:我们拿数组中的第一个元素(0角标上的元素),依次和之后的元素进行比较,如果第二个元素比第一个元素大,那我们就换位,然后再拿第二个元素和第三个元素进行比...

2019-09-29 16:13:28 261

原创 选择排序(Java实现)

选择排序假如我们现在需要将一个数组内的元素进行从小到大排序,数组如下:{ 12, 32, 4, 78, 1, 14, 78, 51, 13, 98, 10, 64, 101, 3}我们需要对这个数组进行排序,介绍第一种排序算法,即选择排序。核心思想:选择排序是从数组的第一个元素,即下标为 0 的元素开始,不断和后面的元素进行比较,如果后面的元素比第一个元素小,那么我们就把第一...

2019-09-29 14:58:59 350

空空如也

空空如也

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

TA关注的人

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