03 2020 档案

摘要:先看一个经典的12306案例: public class SynBlockTest { public static void main(String[] args) { // 一份资源 SynWeb12306 web = new SynWeb12306(); // 多份代理 new Thread(w 阅读全文
posted @ 2020-03-31 22:18 行者老夫 阅读(610) 评论(0) 推荐(0)
摘要:jdk 8 开始 java 引入了lambda 表达式。 lambda适用场景: 1、接口或父类 2、接口或父类只有一个方法 我们从多线程写法来推导一下: 1、外部类写法: package com.xzlf.thread; /** * Lambda 表达式推导一:外部类 * @author xzlf 阅读全文
posted @ 2020-03-30 03:36 行者老夫 阅读(2557) 评论(0) 推荐(0)
摘要:我们使用 java 多线程时,都需要通过线程代理对象来启动线程,常见的写法: new Thread(target).start(); 这在设计模式中叫静态代理模式,静态代理模式组成; 1、公共接口 2、真实角色 3、代理角色 以结婚为例,结婚要找婚庆公司,结婚前和结婚后的事情交给婚庆公司处理,你只要 阅读全文
posted @ 2020-03-30 01:38 行者老夫 阅读(231) 评论(0) 推荐(0)
摘要:完整套路 java 通过实现Callable 接口来实现多线程相比较于继承Thread 接口和 实现Runnable 接口比较麻烦,但好处是可以有返回值。 基本套路: 1. 创建目标对象 2. 创建执行服务 3. 提交执行 4. 获取结果 5. 关闭服务 6. 继续方式一的下载图片,改写一下: 1 阅读全文
posted @ 2020-03-30 01:28 行者老夫 阅读(499) 评论(0) 推荐(0)
摘要:由于java是单继承,很多时候为了实现多线程 通过继承 Thread 类后,就不能再继承其他类了。为了方便可以通过实现 Runnable 接口来实现,和Tread 类似需要重写run 方法。 下面通过模拟12306 黄牛抢票来简单应用: public class Web12306 implement 阅读全文
posted @ 2020-03-30 01:20 行者老夫 阅读(244) 评论(0) 推荐(0)
摘要:java 通过继承Thread类实现多线程很多简单: 只需要重写run方法即可。 比如我们分三个线程去京东下载三张图片: 1、先写个下载类: 注意导入CommonsIO 包 public class WebDownLoad { public void download(String url, Str 阅读全文
posted @ 2020-03-30 01:06 行者老夫 阅读(429) 评论(0) 推荐(0)
摘要:RandomAccessFile 相对其它流多了一个seek() 方法指定指针的偏移量。 1、指定起始位置读取剩余内容 public static void test01() throws IOException { RandomAccessFile raf = new RandomAccessFi 阅读全文
posted @ 2020-03-29 16:50 行者老夫 阅读(536) 评论(0) 推荐(0)
摘要:在java IO 流中我们经常看到这样的写法: ObjectOutputStream oos = new ObjectOutputStream( new BufferedOutputStream(new FileOutputStream("obj.ser"))); 这其实就是IO流使用装饰设计模式, 阅读全文
posted @ 2020-03-29 16:36 行者老夫 阅读(448) 评论(0) 推荐(0)
摘要:DataOutputStream 和 ObjectOutputStream的共同点是: 1、写出后读取 2、读取顺序和写出一致 数据流操作: // 写入 ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStrea 阅读全文
posted @ 2020-03-29 16:13 行者老夫 阅读(513) 评论(0) 推荐(0)
摘要:java 中 转换流是以字符流的形式操作字节流,需要注意一下两点: 1、操作内容必须是纯文本 2、指定字符集避免乱码 操作控制台输入输出: try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); B 阅读全文
posted @ 2020-03-29 15:52 行者老夫 阅读(220) 评论(0) 推荐(0)
摘要:IO流的操作写多了,会发现都已一样的套路,为了使用方便我们可以模拟commosIo 封装一下自己的FileUtils 工具类: 1、封装文件拷贝: 文件拷贝需要输入输出流对接,通过输入流读取数据,然后通过输出流写出数据,封装代码如下: /** * 对接输入输出流 * * @param is * @p 阅读全文
posted @ 2020-03-27 03:27 行者老夫 阅读(819) 评论(0) 推荐(0)
摘要:字节数组流输于缓冲流,放在jvm内存中,java可以直接操作。我们使用时可以不用关闭,交给GC垃圾回收机制处理、 当然我们为了保持良好习惯和代码一致性也可以加上关闭语句。 当其实我么打开ByteArrayInputStream 和 ByteArrayOutputStream 源码可以发现字节数组里的 阅读全文
posted @ 2020-03-27 02:29 行者老夫 阅读(292) 评论(0) 推荐(0)
摘要:IO流操作套路: 1、创建源; 2、选择流; 3、操作; 4、释放资源 上代码: package com.xzlf.io; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; im 阅读全文
posted @ 2020-03-27 02:15 行者老夫 阅读(240) 评论(0) 推荐(0)
摘要:File中经常会使用递归方法打印属性结构、统计文件夹下文件个数、子文件夹个数以及文件大小,可以作为递归的应用练习。 递归的写法,百度一搜一大堆,这里我使用对javabean方式封装了一下: package com.xzlf.io; import java.io.File; public class 阅读全文
posted @ 2020-03-26 03:41 行者老夫 阅读(210) 评论(0) 推荐(0)
摘要:HashSet的底层其实就是HashMap,换句话说HashSet就是简化版的HashMap。 直接上代码: package com.xzlf.collection2; import java.util.HashMap; public class MyHashSet<E> { HashMap<E, 阅读全文
posted @ 2020-03-24 02:29 行者老夫 阅读(317) 评论(0) 推荐(0)
摘要:HashMap结构 HashMap的底层是数组+链表,百度百科找了张图: 先写个链表节点的类 package com.xzlf.collection2; public class Node { int hash; Object key; Object value; Node next; } 自定义一 阅读全文
posted @ 2020-03-23 02:30 行者老夫 阅读(351) 评论(0) 推荐(0)
摘要:Node java 中的 LIinkedList 的数据结构是链表,而链表中每一个元素是节点。 我们先定义一下节点: package com.xzlf.collection; public class Node { Node previous; // 上一个节点 Node next; // 下一个节 阅读全文
posted @ 2020-03-22 23:58 行者老夫 阅读(308) 评论(0) 推荐(0)
摘要:为了照顾初学者,我分几分版本发出来 版本一:基础版本 实现对象创建、元素添加、重新toString() 方法 package com.xzlf.collection; /** * 自定义一个ArrayList,体会底层实现原理 * 初始版本 * @author xzlf * * @param <E> 阅读全文
posted @ 2020-03-22 18:20 行者老夫 阅读(202) 评论(0) 推荐(0)
摘要:java的集合导图总结: 阅读全文
posted @ 2020-03-22 16:42 行者老夫 阅读(175) 评论(0) 推荐(0)
摘要:ArrayList 介绍 打开jdk源码看看官方文档的介绍 粗糙的翻译下大致意思是: List接口的可调整大小的数组实现。实现了所有可选的列表操作,并允许所有元素,包括 null 。除了实现List接口之外,这个类提供了操作数组大小的方法。 ArrayList定义的属性 /** * 默认容量大小10 阅读全文
posted @ 2020-03-21 18:14 行者老夫 阅读(157) 评论(0) 推荐(0)
摘要:什么是递归 我先看下百度百科的解释: 一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的。用递归过程定义的函数,称为递归函数,例如连加、连乘及阶乘等。凡是递归的函数,都是可计算的,即能行的 。 古典递归函数,是一种定义在自然数集合上的函数,它的未知值往往要通过有限次运算回归到已知值 阅读全文
posted @ 2020-03-21 04:30 行者老夫 阅读(493) 评论(0) 推荐(0)
摘要:string stringbuilder stringbuffer三者的区别 从JDK源码看,String、StringBuilder、StringBuffer都是存放在char[] 数组字符串。 简单看下三者的部分源码: String定义属性和构造方法: public final class St 阅读全文
posted @ 2020-03-19 03:25 行者老夫 阅读(4917) 评论(2) 推荐(0)
摘要:都0202 了 java 1.8 已经是主流 自动装箱 、拆箱已经很普遍使用了,那么有时候是不是会遇到坑呢? 我们先来看一段代码: public class TestWraperClass { public static void main(String[] args) { Integer a = 阅读全文
posted @ 2020-03-18 02:37 行者老夫 阅读(165) 评论(0) 推荐(0)
摘要:什么是二分法查找 首先,使用二分法查找的前提是:被查找的数组已排好序 具体实现: 假如有一组数为3,12,24,36,55,68,75,88要查给定的值24.可设三个变量front,mid,end分别指向数据的上界,中间和下界,mid=(front+end)/2. 1.开始令front=0(指向3) 阅读全文
posted @ 2020-03-16 03:40 行者老夫 阅读(4110) 评论(0) 推荐(0)
摘要:Java 排序算法-冒泡排序及其优化什么是冒泡排序基本写法优化后写法终极版本源码及测试 什么是冒泡排序 这里引用一下百度百科上的定义: 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z 阅读全文
posted @ 2020-03-15 01:11 行者老夫 阅读(449) 评论(0) 推荐(0)