前言在上一篇中我们基于数组和链表实现了Map的相关操作,但是对于数据量稍大的情况下,这两种实现方式效率都比较低,为了改进这个问题,本篇我们将来学习二叉树,并通过二叉树来实现上一篇中定义的Map结构二叉树简介虽然大家都知道二叉树是什么,但是为了保证文章的完整性,这里还是简单说说什么是二叉树二叉树中每个节点都包含了两个指针指向自己的左子树和右子树。二叉树的每个节点都包含了一个Key,并且每个节点的Key都大于其...
2021-04-14 11:20:26 8364浏览 0点赞 0回复 0收藏
前言JAVA中的Map主要就是将一个键和一个值联系起来。虽然JAVA中已经提供了很多Map的实现,为了学习并掌握常用的数据结构,从本篇开始我将自己实现Map的功能,本篇主要是通过数组和链表两种方式实现,之后提供二叉树,红黑树,散列表的版本实现。通过自己手写各个版本的Map实现,掌握每种数据结构的优缺点,可以在实际的工作中根据需要选择适合的Map。MapAPI的定义在开始之前,我们需要先定义出Map的接口定义,后续的版本都会基...
2021-04-14 11:20:01 9256浏览 0点赞 0回复 0收藏
setComponentStateChangedListener方法判断组件当前状态今天看到有坛友问到按钮点击调用setComponentStateChangedListener方法监控组件状态改变,触发了两次这个是正常吗?那接下来我来分享一下我的理解,有不对的请指出,谢谢!首先我们先看布局页面,就是个简单的按钮,代码如下<xmlversion"1.0"encoding"utf8"><DirectionalLayoutxmlns:ohos"http:schemas.huawei.comresohos"ohos:height"matchparent"ohos:width"matchparent...
2021-04-13 10:45:26 1.1w浏览 0点赞 0回复 0收藏
前言相信所有的程序员刚开始接触到的算法都会是排序算法,因为排序在对数据处理和计算有这重要的地位,排序算法往往是其他算法的基础;本文我们就先从初级排序算法开始学习算法。排序算法的模板在开始之前我们先定义一个排序算法通用的模板,在后面的排序算法都会实现这个模板publicinterfaceSortTemplate{voidsort(Comparable[]array);defaultvoidprint(Comparable[]array){for(Comparablea:array){System.out.print(a+"");}}d...
2021-04-13 10:45:04 6685浏览 0点赞 0回复 1收藏
前言在上一篇《常见的初级排序算法,这次全搞懂》,主要谈了常用的初级算法,这些算法的时间复杂度都是O(n²),这些算法无法处理大量数据;本篇我们谈一种基于归并操作完成排序的算法。归并排序算法思路要将一个数组排序,可以先将数组分为两个数组分别排序,然后再将结果归并在一起,重复递归这个过程,直到数组整体有序,这就是归并排序的算法思路。归并排序的优点是它能够保证任意长度为N的数组排序所需的时间与NlogN成...
2021-04-13 10:44:31 8542浏览 0点赞 0回复 0收藏
本文利用FloodFill算法实现PixelMap的填色(油漆桶)效果。关于FloodFill算法的介绍,请查看这篇文章:https:blog.csdn.netlion19930924articledetails54293661下面介绍鸿蒙系统下填色功能的实现:定义一个算法类,用于实现FloodFill算法:publicclassFloodFillAlgorithm{privatePixelMapfillBitmap;privateintwidth;privateintheight;privatebooleanisFillColortrue;privateintmaxStackSize500;privateint[]xstacknewint[maxSta...
2021-04-13 10:44:08 1.2w浏览 0点赞 0回复 0收藏
本文已被Github仓库收录https:github.comsilently9527JavaCore程序员常用的IDEA插件:https:github.comsilently9527ToolsetIdeaPlugin完全开源的淘客项目:https:github.comsilently9527mallcouponsserver前言快速排序可以说是使用最广的排序算法了,主要的特点是基于原地排序(不需要使用辅助数组,节省空间);其实对于长度为N的数组使用快速排序时间复杂度为NlogN;在前几篇也一起讨论了其他的排序算法,都没能够把这两个特...
2021-04-12 14:26:22 7428浏览 0点赞 0回复 0收藏
前言假如你设计的事件系统中有很多的事件,每个事件都定义了不同的权重值,系统需要优先处理权重较高的事件,这里你就需要使用到优先级队列,本篇我们一起来学习实现优先级队列的常用方式队列API定义在实现之前,首先我们需要先定义出优先级队的API,优先级队列是一种抽象的数据结构,我们依然可以基于前面我们使用到的队列API来修改;需要了解之前的队列的实现可以查看《面试的季节到了,老哥确定不来复习下数据结构吗》public...
2021-04-12 14:26:00 7991浏览 1点赞 0回复 0收藏
前言在上一篇中我们一起使用二叉堆实现了优先级队列,假如我们从构建好的优先级队列中持续调用删除最小(或者最大),把结果输出到另一个数组中,那么就可以把数组的所有元素进行排序,这就是本篇我们需要学习的堆排序。在看本篇之前需要先看下前一篇《原来实现优先级队列如此简单》堆排序的过程主要有两个阶段:把原始数据构造成一个有序堆(构造堆)从堆中按照递减顺序取出所有元素就可以得到排序结果(下沉排序)开始之前,...
2021-04-12 14:25:37 8157浏览 0点赞 0回复 0收藏
一、功能介绍:基于鸿蒙JAVASDK开发的一款五子棋小游戏,自带简单AI。此代码从之前安卓代码移植过来,安卓带局域网对战功能,限于目前鸿蒙真机环境相对欠缺,等鸿蒙稍微普及一点,再做移植。二、开发要点:鸿蒙代码结构,Ability、Slice等组件使用,xml布局文件编写自定义Component开发,layout、canvas绘图,位图操作,点击事件处理真机调试参考官网配置好添加应用时包名填com.txxia.fivechess修改entry中的build.gradle里的si...
2021-04-12 14:24:38 1.2w浏览 0点赞 0回复 0收藏
最新遇到一个需要从快应用跳转到AndroidApp的需求,以下记录下实现的方式。在需要跳转的目标安卓App的activity中添加对外的schema,示例代码如下:<activityandroid:label"7F070043"android:name"com.huawei.phoneservice.HelpCenterActivity"android:exported"true"android:excludeFromRecents"true"android:launchMode"2"android:configChanges"0x40002D84"><intentfilter><actionandroid:name"android.intent.action.VIEW"><...
2021-04-09 18:31:20 1.1w浏览 0点赞 0回复 0收藏
常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。这里主要介绍希尔排序。一图胜千言:1.算法介绍1.1算法描述希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率;但插入排序一般来说...
2021-04-09 18:31:11 7860浏览 0点赞 0回复 0收藏
引出获取多线程的方法,我们都知道有三种,还有一种是实现Callable接口实现Runnable接口实例化Thread类实现Callable接口使用线程池获取Callable接口Runnable和Callable的区别Runnable接口没有返回值,Callable接口有返回值Runnable接口不会抛异常,Callable接口可以抛异常接口的方法不一样,一个run方法,一个call方法Callable方法支持泛型Callable接口实现多线程Callable接口,是一种让线程执行完成后,能够返回结果的当我们实...
2021-04-09 18:30:59 1.1w浏览 0点赞 0回复 0收藏
前言前几天写了一篇《JVM性能调优实战:让你的IntelliJIdea纵享丝滑》,其中有对GC垃圾回收器的选择尝试,本篇我们就来详细的看看JVM中常见的垃圾回收器有哪些以及每个垃圾回收器的特点,这也是面试的时候经常被问的内容JVM堆内存概览在聊垃圾回收器之前,我们先来看看JVM堆内存的区域划分是怎么样的,看下图因为虚拟机使用的垃圾回收算法是分代收集算法,所以堆内存被分为了新生代和老年代新生代使用的垃圾回收算法是复制算法...
2021-04-08 19:12:15 1.4w浏览 0点赞 0回复 0收藏
LockSupportLockSupport是线程等待唤醒机制(waitnotify)的改良版本。LockSupport中的park()和unpark()的作用分别是阻塞线程和接触阻塞线程。3种让线程等待和唤醒的方法(线程通信)方式1:使用Object中的wait()方法让线程等待,notify()方法唤醒线程synchronized+wait+notify方式1:使用Object中的wait()方法让线程等待,notify()方法唤醒线程staticObjectobjectLocknewObject();创建锁publicstaticvoidmain(String[]args){创...
2021-04-08 19:11:34 9214浏览 0点赞 0回复 0收藏
前言先点赞再观看,要有好习惯几乎所有的大型应用都是从一个小应用开始的,好的互联网产品是慢慢运营出来的,不是一开始就开发好的,所以本篇我们来聊聊应用架构的演进历程。如何打造一个高可用,高性能,易扩展的应用?首先我们了解一下大型应用的特点:高可用:系统需要不间断的提供服务,不能出现单点故障高并发:在大流量的冲击下,系统依然稳定提供服务大数据:应用每天都会产生大量的数据,需要存储和管理好这些数据最简...
2021-04-08 19:11:23 8799浏览 0点赞 0回复 0收藏
测试选择了两种深度拷贝的方式ObjectStreamfastserializationfastserialization是一个开源的高性能的序列化库。RuedigerMoellerfastserialization使用idea新建一个maven项目,引入需要的开源工具JMH和上面的fastserialization。<dependencies><dependency><groupId>junit<groupId><artifactId>junit<artifactId><version>4.11<version><scope>test<scope><dependency><dependency><groupId>org.openjdk.jmh<groupId><artifactId...
2021-04-08 19:11:08 7405浏览 0点赞 0回复 0收藏
周末在家休息,女朋友在刷朋友圈,突然她问我:鸿蒙OS回顾2019年8月9日华为开发者大会上,华为消费者业务CEO余承东正式宣布发布自有操作系统鸿蒙,内核为Linux内核、鸿蒙微内核和LiteOS。未来将摆脱Linux内核和LiteOS,只有鸿蒙微内核。鸿蒙(英语:HarmonyOS,开发代号Ark)是华为自2012年开发的一款可能兼容Androidapp的跨平台操作系统。图:鸿蒙OS的四大技术特性1.分布式架构首次用于终端OS,实现跨终端无缝协同体验2.确定...
2021-04-07 10:23:54 1.1w浏览 2点赞 1回复 0收藏
目的从网络上加载一张图片,这基本是每个应用都需要的功能。在android平台我们有ImageLoader,Picasso,Glide,其中又以Glide最为人熟知。为了更方便的开发鸿蒙应用,我们也根据Glide最核心的设计思路,完成鸿蒙下的图片加载框架。Glide核心设计思路我把这种设计模式称作为取号机设计,以大家熟悉的银行业务为例,每个进入银行需要办理业务的人,他们需求的业务各有不同,那么待办理的业务内容相当于请求信息(Request),进入...
2021-04-07 10:23:44 1.2w浏览 2点赞 1回复 0收藏
前言自己在开发的过程中经常会使用一些在线的工具,比如:时间戳转日期,JSON格式化等等;前几天思考了下想把这些常用的功能都做成IDEA插件,在使用的时候就不用去网上寻找工具,在IDEA中就可以快速完成提升开发人员开发效率,所以就熬夜肝了这个插件,欢迎大家都来使用。Github地址:https:github.comsilently95...Gitee地址:https:gitee.comsilently952...觉得好用的小伙伴记得小手一抖star哟已实现功能[x]SQL转换成ElasticSea...
2021-04-07 10:23:32 1.0w浏览 0点赞 0回复 0收藏