自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 336. Palindrome Pairs(回文对)

题目给定一组唯一的单词, 找出所有不同 的索引对(i, j),使得列表中的两个单词, words[i] + words[j] ,可拼接成回文串。示例 1:输入: ["abcd","dcba","lls","s","sssll"]输出: [[0,1],[1,0],[3,2],[2,4]] 解释: 可拼接成的回

2019-01-31 21:56:59 702 1

原创 LeetCode 43. 字符串相乘(Multiply Strings) 大数乘法

题目给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = “2”, num2 = “3”输出: “6”示例 2:输入: num1 = “123”, num2 = “456”输出: “56088”说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数...

2019-01-31 15:49:58 520

原创 LeetCode 5. Longest Palindromic Substring(最长回文子串)

题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"解题思路思路:采用的思路是遍历每个点,然后分别以每

2019-01-31 15:31:31 206

原创 LeetCode 67.AddBinary(二进制数相加)

题目描述给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101&quo

2019-01-31 15:16:00 197

原创 leetcode 214. Shortest Palindrome(最短回文串)

题目描述给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。示例 1: 输入: “aacecaaa”输出: “aaacecaaa”示例 2: 输入: “abcd”输出: “dcbabcd”求解什么是回文串?回文串就是指正着看和反过来看都是相同的字符串,即字符串对称。回文分为单回文和双回文,单回文字符串长度是奇数,这个字符串...

2019-01-31 14:54:50 375

原创 设计模式之迭代器模式和组合模式

迭代器模式和组合模式什么是迭代器模式:这个模式主要是基于迭代器的扩展设计而形成的一种模式,迭代器的常用方法是hasNext()和next()方法,前者判断有没有下一个元素,后者表示取出下一个元素,在Java集合框架中,我们可以发现,其实所有集合的超类Collection实现了Iterator接口:public interface Collection extends Iterable也就是说,...

2019-01-29 19:43:56 566

原创 设计模式之代理模式

什么是代理模式“代理”,为一个对象提供一个替身或者占位符以访问这个对象。关系示意图如下:当我希望调用被代理者的某个方法时,需要经过代理这个中间环节,它会决定被代理者的哪些方法可以被调用,哪些方法,不能被调用,或者为被代理者加上一些别的行为。一、远程调用(RMI)当需要引用一个对象,而这个对象处于另一个虚拟机上,这时就需要使用远程调用,远程调用的思想就是通过RMI通信获取远程对象的信息,在...

2019-01-29 17:18:46 242

原创 设计模式之状态模式

什么是状态模式概念引入:状态模式是一种基于状态设计行为的模式。当我们需要设计这样一个系统:这个系统有许多状态,且对这个系统进行操作的有许多种方法,在系统的不同状态下,执行这些操作会导致不同的结果。这时就需要状态模式的设计理念来组织我们的代码了,以应对在多操作种类下的多状态之间的转化。直接来分析一个例题,试着用状态模式的理念去实现。如图:简单分析一下:这是一个与糖果贩卖机有关的题,糖果贩卖...

2019-01-28 22:30:45 202

原创 设计模式之模板方法模式

什么是模板方法模式概念:模板方法,顾名思义,就是提供一个模板给子类使用,执行这个方法,会按照一套既定的流程去执行,模板方法规定了方法执行过程中需要经历的步骤,这些步骤(方法)具体执行什么内容,它并不关心,这些方法可能是继承来的final方法,有可能是需要子类去实现的方法。直接贴出我的代码,模板方法模式的基本结构就一目了然了:public abstract class CaffeineBever...

2019-01-28 17:24:24 322

原创 设计模式之适配器模式(ArrayList实现队列)

什么是适配器模式概念:适配器模式是指通过一个适配器的中间环节使得一个类的方法被包装为另一个类的方法。如图:我们希望调用接口A的方法,当没有接口A提供,而只有与它相似的接口B可以使用,这时就需要使用到适配器。在工作中,可能需要维护一些比较老旧的代码,为了适应新的需求,且不去重写代码的情况下,就可以加上适配器这个中间环节,使得过时的代码满足客户的需求。适配器模式在Java中具体体现为方法的封装,...

2019-01-28 02:57:36 500

原创 UDP实现客户端(Android)和服务器之间通信

UDP通信原理我们之间学习过TCP通信,TCP是一种可靠的面向连接的通信协议,在发送数据前会通过三次握手建立可靠的连接,在发送数据报的过程中有数据报的重传机制,在结束连接的时候有四次挥手来保证所有的数据可以顺利地发出,然后安全地断开服务器和客户端的连接。而UDP不能保证这些,UDP只需要知道目的地的IP地址和端口号,然后把数据报送的指定的地址,而不关心数据报是否被收到,因此,UDP通信是一种无连...

2019-01-26 03:59:15 3707 3

原创 设计模式之命令模式

命令模式的概念命令模式把请求封装成对象,这让你可以使用不同的请求,队列或者日志来参数化其他对象,命令模式也支持撤销操作。命令模式包括三大组成部分:命令的执行者,命令,命令的发出者。通过具体的命令来实现命令的发出者和执行者之间的解耦,命令的发出者只负责管理和调用这些命令,而不关心命令的具体内容是什么;同样,命令的执行者只知道执行自己的方法,而不知道方法在上层被如何调用;命令这个环节灵活性很强,它...

2019-01-25 13:47:24 201

原创 设计模式之工厂模式

简单工厂概念:在Java代码中,我们不希望把对象的创建和逻辑代码混在一起,而是希望把对象的创建封装在一个接口中,调用这个接口(方法)就可以返回一个被实例化的对象。这样的好处是使得代码逻辑清晰,功能模块分离,增加代码的可读性和可修改性,比如这个方法:Pizza pizza = nyStore.createPizza("cheese");public Pizza createPizza(Stri...

2019-01-22 14:15:30 144

原创 Android UI之Fragment

简介:Fragment(碎片),屏幕中的一部分区域专门用于切换不同碎片的显示,另一部分区域用来做碎片切换的触发,类似于微信的首界面,下方有四个选择,“微信”,“通讯录”,“发现”和“我”,当点击了相应部分,上方的碎片就会更新显示。xml的布局配置假设我们要做一个文件管理APP,其中某个界面需要用到三个部分的切换,包括“最近”、“分类”、“手机”三个碎片。总共需要设计四个xml文件,一个用于ac...

2019-01-21 23:57:47 255

原创 Android UI之ListView

简介:ListView组件是在Android APP开发中经常用到的组件,主要是用来显示列表以及相应按下触发完成界面的跳转。xml文件在ListView中的使用:xml的作用:xml文件在Android开发中往往承担了界面的布局的作用,其中包含了各个组件以及它们在界面上存储的位置;同时比如strings.xml文件可以配置activity中用到的字符串,dimens.xml文件可以配置边界的位...

2019-01-21 22:19:35 363

原创 TCP实现客户端(Android)和服务器之间通信

Android版的通信和JavaSE版通信二者都是使用基于TCP协议实现的一组API,都是使用ServerSocket服务器与Socket通道实现的服务器和客户端之间的对话。因此从原理上二者是完全相同的。在Android APP的开发上,一般需要通过Java-ADT写一个客户端安装到安卓手机上,再通过JavaSE写一个服务器。客户端通过服务器的ip地址和端口号连接服务器,服务器再作为中间环节连接...

2019-01-21 21:09:51 4175 3

原创 Android传感器的使用

如何初始化1、获取传感器管理器对象:SensorManager sensorMgr=(SensorManager)this.getSystemService(SENSOR_SERVICE);2、获取传感器对象(比如重力传感器):Sensor sensor=sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);3、创建监听器并实现传感器...

2019-01-20 12:59:13 808

原创 Android菜单栏的使用

strings.xmlxml文件使用的是可扩展标记语言,它并不是用来显示数据,而是用来传输数据的。在Android的开发设计中,xml文件和activity中的代码逻辑得到了分离,使得程序更加便于理解和修改。strings.xml文件中存放的是字符串的键值对,通过字符串来索引字符串,键是唯一的,且一个键仅有唯一的一个对应的字符串。代码如下:<?xml version="1.0&qu

2019-01-20 01:53:17 1253

原创 Android拍照或从相册取得照片并裁剪

设计思路两种方式获取图片:一种是拍照,另一种是从相册得到。因为重写了onActivityResult方法,每一个activity结束后都会调用上一个activity的onActivityResult方法把当前activity处理数据返回给上一个activity进行进一步的处理,返回的信息包括当前activity在上一个activity中的被调用处(用于对不同调用方法有不同的处理,比如有两个按钮会...

2019-01-19 20:35:45 941 1

原创 Android多线程生成小球

Android绘图用到的几个类 private ImageView ivDraw; //图像视图显示图片 private Bitmap bitMap; //位图,类似于画框,可以对图片做行列处理 private Canvas canvas; //画布 private Paint p; //画笔 Handler dh; //处理器1、ImageVie...

2019-01-19 14:16:00 559

原创 Android抽奖小程序

Android的代码结构Android和JavaSE编程的不同之处就在于Android的组件和逻辑代码是完全分开的,在一个xml文件中添加组件,设置组件的属性,并且对组件进行布局。保存xml文件后,会生成一个R.java文件,R.java文件存放的是组件的地址索引,方便在需要对组件进行操作时调用。接下来在MainActivity类中实现代码的逻辑部分,通过R.java获取组件对象,然后编写代码逻...

2019-01-19 12:06:53 2777

原创 Java泛型通配符详解

泛型 < T >泛型在Java的集合中应用十分广泛,一个集合对象往往可以存储不同类别的数据,比如ArrayList,它可以存储String,Integer,对象的引用等各种类型的数据,源码中关于类的对象都用T来表示,T只是一个标识符,不代表任何具体的类。也就是说在代码的编译期间我们是不知道这个集合会用来存储什么类型的数据的,只要在new集合对象的时候指定存储的数据的类型就可以了。这就...

2019-01-12 11:27:33 690

原创 设计模式之装饰者模式

装饰者模式的概念装饰者模式的基本形式是把一个类对象的引用作为参数传入另一个类的对象的构造方法中,然后以此类推,形成一条引用链,实现对象的多层包装,实现了把有限的类包装成众多有复杂功能的类,实现更多丰富的功能。在Java中比较常见的装饰者模式是Java的util包中的IO,比如IO字节流的超类InputSream可以包装为文件字节流FileInputStream,缓冲输入流BufferedInpu...

2019-01-09 14:52:12 155

原创 设计模式之观察者模式

什么是观察者模式观察者模式是指对象之间的关系为一对多的关系,比如杂志和读者的关系,众多的读者和某一杂志之间是一对多的关系,当读者没有订阅这个杂志的时候,两者是没有联系的,如果读者订阅了杂志,那么当杂志内容有更新的时候,它就会通知读者并且把新的内容及时发送给读者,读者如果觉得不喜欢这个杂志了,也随时可以取消订阅,自然也得不到新的消息通知了。观察者模式涉及到了一种松耦合的概念,读者是观察者,杂志就是...

2019-01-08 15:14:38 136

原创 设计模式之策略模式(面向接口编程)

面向实现编程的弊端举一个简单的动物界的例子,我们需要写一段代码,包含以下要素:鸭子类,鸭子的若干子类,实现一些方法。惯用的编程思路:1、写一个鸭子类Duck,写几个方法,比如鸭子飞行的方法fly(),鸭子叫的方法quack()。2、写鸭子的子类,比如绿头鸭MallardDuck,继承Duck类。3、在子类中重写以上两个方法。这种编程思路的弊端:1、代码冗杂:在代码量少且代码稳定不变...

2019-01-06 20:27:48 1460

原创 向上转型底层原理分析

向上转型向上转型在写代码的过程中经常会用到,它不仅是实现多态的重要机制,也是Java继承体系的精华体现。向上转型常见的形式是:Person person = new Student();这里的Student类是Person类的子类,我们通过Student类的实例构建了一个父类的对象。在方法的调用层面上,person对象只能调用在Person类中存在的方法,且其中的方法一旦被子类重写,那么就会优...

2019-01-06 17:49:01 1319 3

原创 Runnable和Thread源码分析

Runnable和Thread源码分析问题的引入:Runnable是一个接口,它只有一个run()抽象方法,run()抽象方法需要被实现后才能使用。Thread类继承了Runnable接口,并且Thread中实现了run()方法。最后,通过Thread类的start()方法就可以启动线程了。这是我们平时在应用中使用线程的常用方法。如果多加思考你会发现以下几个问题:1、为什么调用start()...

2019-01-04 21:35:51 1669 4

原创 ArrayList的底层原理及手写实现

ArrayList的底层原理ArrayList的底层是一个动态的数组,数组的长度可以根据实际存储元素数量的增加而动态增长。ArrayList的扩容机制:ArrayList的底层数组长度可以通过有参的构造方法给定,也可以通过无参的构造方法默认给定,默认长度是10,存储的元素会从第一个存储单元开始逐个存储,一旦存满,就会触发扩容机制。当需要扩容时,会先申明一个新的数组,它的长度是原数组长度的1.5...

2019-01-04 14:55:19 640

原创 Dijkstra算法Java实现

题目描述:给定一个图,给定各个顶点之间的路径长度,求解从图中一个节顶点出发到任意节顶点的最短距离。解题思路:我们采用Dijkstra算法求解最短路径,Dijkstra算法采用广度优先搜索和贪心策略实现求解单源最短路径。选择离出发顶点最近的顶点并以这个顶点为中心调整出发顶点到那些周边顶点的最短距离,不断遍历并且修正,直到从出发顶点到任意顶点的权重修正完全。例题图示:详细解题步骤:**1...

2019-01-03 13:37:21 8476 4

原创 如何正确地结束一个线程

为什么不用stop()方法一般来说,当一个线程的方法体执行完,这个方法就会结束了。我们一般不直接使用stop方法来终止线程,这可能会导致业务逻辑不完整或者破坏原子性的操作,一段代码可能用来输出某些重要的信息,在方法的执行中使用stop方法终止线程,会使得输出的信息破坏或者不完整;在原子操作比如重入锁的使用时,当一个线程对象多次获得锁会使得计数加一,接下来需要以相同的次数释放锁,别的线程才能获得锁...

2019-01-02 00:19:25 14059 1

原创 MESI协议和Volatile关键字(解决多线程下变量更新不同步问题)

多线程下变量更新不同步问题测试一个通过修改while循环中标志位来结束一个线程的方法。使while循环中的内容为空,启动线程,线程死循环。当我们在主线程里把标志位flag置为false时,发现线程没有结束(即循环没有退出)。代码如下:public class Test { boolean flag=true; public static void main(Strin...

2019-01-01 16:36:14 1553

空空如也

空空如也

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

TA关注的人

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