java
文章平均质量分 84
奇舞移动
这个作者很懒,什么都没留下…
展开
-
ArrayMap是如何提高内存的使用效率的?
ArraySet使用数组保存数据,提高了内存的使用效率,在数据量不超过1000时,相较于HashSet,效率最多不会降低50%,本节来分析下ArraySet 添加和删除元素分析,谷歌指出ArrayMap的设计也是为了更加高效地使用内存,在数据量不超过1000时,效率最多不会降低50%。阅读原码可以发现,ArrayMap和ArraySet在实现上保持了统一,主要的不同是元素的存储方式。继承结构...原创 2018-10-15 10:54:13 · 466 阅读 · 0 评论 -
Java迭代器spliterator(二)
传送门:Java迭代器spliterator(一)在上篇文章中,已经使用int数组简单说明了java 8中Spliterator的使用,上篇文章还有以下几个问题还没有解决:Arrays类使用的spliterator具体实现由哪些以上具体实现中Consumer有哪些类型集合是否提供了Spliterator操作具体实现如上图所示,Arrays的spliterator函数提供了4中...原创 2019-01-11 09:49:12 · 553 阅读 · 1 评论 -
Java数据结构之PriorityQueue
前言Queue(队列)是拥有先进先出(FIFO)特性的数据结构,PriorityQueue(优先级队列)是它的子类之一,不同于先进先出,它可以通过比较器控制元素的输出顺序(优先级)。本文就来分析一下PriorityQueuede的源码,看看它是如何实现的。类继承关系先来看Queue接口:public interface Queue<E> extends Collection&l...原创 2018-12-24 09:49:24 · 199 阅读 · 0 评论 -
Java常用数据结构之Stack&Vector
前言继续Java常用数据结构分析之路,这次的主角是Stack和Vector。Vector已经不推荐使用了,可以用ArrayList和LinkedList替代,它的主要特色是线程安全,代价自然就是效率。Stack则是拥有先进后出的特性,在特定的环境下能很好的工作。这两个类相较于List和Map的使用频率要少,但还是需要理解其内部原理的。类继承关系先来看Stack:public class S...原创 2018-12-24 09:46:42 · 159 阅读 · 0 评论 -
基于ReactNative实现动态加载
背景最近看到某厂Android端物联网Demo演示应用中可动态加载模块,具体操作是在控制台拖拽生成一个模块和链接地址。然后在Android端刷新首页即可看到新添加的模块。下载Demo代码之后发现用到了facebook开源的react-native框架。然后打算研究一下是否能模拟动态下发模块的效果。于是决定从以下几个方面来实现这个过程。1、服务端——实现首页接口及下载接口服务端用Spring...原创 2018-12-24 09:41:32 · 5218 阅读 · 1 评论 -
Java NIO之Scatter和Gather
前面的文章分享了Buffer和Channel,以及关于Buffer和Channel的基本操作。这篇文章继续分享关于Channel的Buffer的操作Scatter和Gather,这篇内容比较简单。什么是Scatter和GatherScatter和Gather的字面意思就可以分好的解释他们各自的用途。其中Scatter的意思是分散,Gather的意思是聚集,我们再来看一下他们是如何分散和聚集的,...原创 2018-12-12 09:42:30 · 229 阅读 · 0 评论 -
AccessiblityService知多少
最近研究了自动化操作的相关事宜,辅助服务就是其中一项技术。下面介绍一下相关方面技术。这项技术可以用作抢红包、App自动安装卸载、页面内容抓取,WX消息的自动发送、自动发送朋友圈,H5页面内容抓取也可以。原理对于那些由于视力、听力或其它身体原因导致不能方便使用Android智能手机的用户,Android提供了Accessibility功能和服务辅助这些用户更加简单地操作设备,包括文字转语音(不支...原创 2018-12-17 10:55:42 · 563 阅读 · 0 评论 -
Java NIO之Channel
今天来谈一谈NIO中的Channel,上一篇文章介绍了Buffer,有了Buffer还需要有一个通道来处理Buffer。它就是今天我们要学习的Channel。按照字面理解,它就是一个通道,可以从通道中读数据,也可以把数据写入到通道中。Channel可以分为几大类FileChannel(文件操作)SocketChannel(客户端TCP操作)ServerSocketChannel(服务端T...原创 2018-12-11 09:41:12 · 158 阅读 · 0 评论 -
Java NIO之Buffer
什么是NIO在计算机世界,要想和计算机交互必须有输入(Input)和输出(Output)才能把我们的请求发送给计算机,计算机处理后给我们一个结果,可见输入输出很重要。同理在Java中也有处理输入输出的模块。包括IO和NIO,其中IO相关代码在java.io包下,我们今天要聊的NIO在java.nio包下。这两种IO有什么区别呢?传统IO基于字节流和字符流进行操作,而NIO基于Channel和B...原创 2018-12-07 09:43:01 · 165 阅读 · 0 评论 -
Java NIO之Selector
前面两篇文章介绍了NIO中的Buffer和Channel,有了之前的基础,这篇文章来介绍一下另一个比较重要的概念----Selector。我们知道系统线程的切换是消耗系统资源的,如果我们每一个连接都用一个线程来管理,资源的开销会非常大,这个时候就可以用Selector。通过Selector可以实现一个线程管理多个Channel,如下图:Selector使用打开使用之前获得一个Selecto...原创 2018-12-14 09:53:47 · 160 阅读 · 0 评论 -
Android修炼之混淆
自嘲时刻作为Java和Android开发者,大家应该都对混淆很熟悉了。网上也有各路大神提供的混淆模板,基本上直接拿来用就好。但我还是想捋一捋,因为工作中被混淆这家伙“玩弄”了好几次,必须把它记在小本本上。介绍基本概念混淆,字面上来说就是把项目中的包名、类名、方法名和变量名等进行更改,用以迷惑别人。但混淆其实包含了代码压缩、优化、校验等过程,把混淆称作ProGuard更合适。ProGuar...原创 2018-11-28 09:54:40 · 161 阅读 · 0 评论 -
Vector和ArrayList对比
本文会对ArrayList和Vector进行分析,为什么会关注这两个类,主要是因为他们拥有相同的继承结构,接下来就来探索下这两个类实现和效率的异同。继承结构可以看到,Vector和ArrayList都实现了List和RandomAccess接口,都继承了AbstractList。通过他们的继承结构,大致可以猜测他们在元素的处理上存在很多相同的地方。存储结构Vector和ArrayList...原创 2018-11-30 09:44:12 · 175 阅读 · 0 评论 -
Java常用数据结构之Map-HashMap
前言上篇文章中介绍了AbstractMap抽象类,本文就来分析一下HashMap类。jdk1.8对HashMap进行了大幅优化。在jdk1.8之前,HashMap的实现是数组+链表,即通过拉链法来解决Hash冲突。假设链表的长度为n,则链表中查找元素的时间复杂度为O(n),如果n特别大,就会很耗时。在jdk1.8中,HashMap的实现改成了数组+链表+红黑树,即当n超过某个阀值时,会将链表转化...原创 2018-11-07 09:43:36 · 161 阅读 · 0 评论 -
Java常用数据结构之Map-AbstractMap
前言Map集合是用来存储<Key, Value>键值对数据的,是日常开发中使用最多的数据结构之一。Map集合相对List集合来说结构会稍微复杂一些,所以Map系列会分开写。本文主要分析AbstractMap。类图Map接口中定义了各种基本方法,而键值对数据实际是保存在Entry中的。AbstractMap类和AbstractList类一样,都是一种模板类,提供了Map的基本实现...原创 2018-11-06 09:49:22 · 170 阅读 · 0 评论 -
设计模式之装饰模式
前言为什么要写装饰模式?这几天在工作中又遇到了RePlugin。在RePlugin中有插件和宿主的概念,插件和宿主分别有自己的Context。通过以下两个方法可以分别获得宿主和插件的Context。RePlugin是一套完整的、稳定的、适合全面使用的,占坑类插件化方案,由360手机卫士的RePlugin Team研发,也是业内首个提出"全面插件化"(全面特性、全面兼容、全面使用)的方案。...原创 2018-11-01 09:05:23 · 157 阅读 · 0 评论 -
Java常用数据结构之List
JDK 11正式发布了,Oracle终于出了一个长期维护版本,应该将是继JDK 8之后的一个常规使用版本。前言作为Java系开发者对Java集合类的使用应该是较为频繁的,也是面试中经常会被问的问题。一直想整理一下Java集合和Android中的优化集合类,借这次机会把Java中的常用集合都整理一遍。由于JDK 11已出,本系列文章中的源码都来自JDK 11(集合这部分应该没什么变化)。L...原创 2018-10-29 09:55:35 · 131 阅读 · 0 评论 -
Java迭代器spliterator
tags : java-collectionsspliterator是java1.8引入的一种并行遍历的机制,Iterator提供也提供了对集合数据进行遍历的能力,但一个是顺序遍历,一个是并行遍历。如上图所示,Arrays的分割迭代函数有2种形式,spliterator(xxx []), spliterator(xxx [] , int, int), 具体的xxx包括int, long, d...原创 2019-01-07 11:27:16 · 1162 阅读 · 0 评论