Java算法及JDK源码探究
文章平均质量分 59
对 JAVA 算法和 JDK源码的学习
_大木_
所有的付出没有亏欠, 只为不负遇见.~
展开
-
LinkedList 方法吐血大汇总
耍起来package com.beyond;import java.util.*;public class LinkedListTest { public static void main(String[] args) { List<Integer> list = new LinkedList<>(); List<Integer> list1 = new ArrayList<>(); list.原创 2021-03-10 21:17:59 · 439 阅读 · 5 评论 -
Java : 网络编程
文章目录Java 网络编程java网络编程基本概念基本网络程序模型(开发一个基本的 C/S 程序)编写一个服务器端程序编写客户端程序ECHO 程序范例: 编写服务器端范例: 客户端实现以上完成了一个基础的程序, 但是程序有一个问题, 本程序为单线程, 因为所有的操作都是在主方法中进行的.要想解决这个问题, 就必须进行多线程的处理, 把每一个连接的用户都封装在一个线程里面, 这样就不会限制在单线程里面了.改进的服务器端代码总结:Java 网络编程java网络编程基本概念网络: 将地理上分开的主机连接在一原创 2021-02-03 01:36:06 · 174 阅读 · 2 评论 -
Java : volatile 关键字
Volatile单例设计模式的本质在于构造方法被私有化, 而后通过类内部的 static 方法取得实例化对象, 而单例设计有两种模式: 懒汉式(使用时才进行实例化对象), 饿汉式(在类加载时候进行对象实例化).范例: 观察懒汉式单例设计模式的问题package com.beyond.dhl;class Singleton { private static Singleton instance; // 懒汉式所以不会进行实例化对象 private Singleton() {原创 2021-02-02 23:29:53 · 279 阅读 · 10 评论 -
Java 排序算法: 基数排序
基数排序基本思想:基数排序(radixSort)属于"分配式排序", 又称为"桶子法" 或 bin sort, 顾名思义, 它是通过键值的各个位的值, 将要排序的元素分配到某些’桶’中, 达到排序的目的.特点如下:(1)通过键值得各个位的值,将要排序的元素分配至一些桶中,达到排序的作用(2)基数排序法是属于稳定性的排序,基数排序法是效率高的稳定排序法(3)基数排序是桶排序的扩展代码实现package com.com.beyond.dhl.utils.sort;import java.ut原创 2021-02-02 20:59:47 · 287 阅读 · 1 评论 -
Java 排序算法: 归并排序
归并排序归并排序的思想:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略, 分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案合并在一起,即分而治之)实现:package com.com.beyond.dhl.utils.sort;import javax.sound.midi.MidiChannel;import java.util.Arrays;p原创 2021-02-02 16:59:22 · 205 阅读 · 7 评论 -
Java 排序算法: 插入排序 (简单插入排序 和 希尔排序)
五大排序内部算法:选择排序简单选择排序堆排序插入排序简单插入排序希尔排序交换排序冒泡排序快速排序归并排序基数排序简单插入排序插入排序(Insertion Sorting) 的基本思想:把n个待排序的元素看成为一个有序表和一个无序表, 开始时有序表中只包含一个元素, 无序表中包含有 n-1 个元素, 排序过程中每次从无序表中取得第一个元素, 把它的排序码依次与有序元素表元素的排序码进行比较, 将它插入到有序表中的适当位置, 使之成为新的有序表....原创 2021-02-02 16:16:08 · 226 阅读 · 1 评论 -
Java : Stream 数据流 (Collection 接口扩充, Stream基本操作, MapReduce 模型)
文章目录Collection 接口改进范例: 使用foreach 输出范例: 观察 StreamStream 数据流的基本操作范例: 数据过滤 filter()Stream 接口里有两个重要的操作方法:MapReduce 基础模型范例: 编写一个简单的数据统计操作范例: 实现订单信息的保存, 随后进行一个总量的统计从 JDK 1.8 发起的时候实际上就是世界上大数据兴起的时候, 在大数据开发里面有一个最经典的模型: MapReduce, 实际上这属于数据的两个操作阶段:Map : 处理数据Redu原创 2021-01-30 00:13:10 · 608 阅读 · 5 评论 -
Java : Collections 工具类
Collection 是集合的接口, 而Collections 是一个集合的操作工具类.在这个类中里面提供有集合的基础操作: 如 反转, 排序等.范例: 创建空集合(可以作为标记)package com.beyond.nothing;import java.util.Collections;import java.util.List;public class test { public static void main(String[] args) throws Exception原创 2021-01-28 19:35:51 · 173 阅读 · 2 评论 -
Java : Properties 属性操作
Properties 属性操作在涉及国际化操作的时候, 我们涉及过一种属性文件(资源文件: *.properties), 在这种文件里面, 其内容的保存格式为: "key=value"的形式, 实际上是通过 ResourceBundle 类读取的时候只能够读取内容, 而如果想要编辑内容, 那么就要通过 Properties 类来完成了, 也就是说这个类专门做属性处理的.Properties 是 Hashtable 的子类, 并且这个类定义:public class Properties exten原创 2021-01-28 18:49:09 · 282 阅读 · 6 评论 -
Java 类集框架: Stack 栈 与 Queue 队列
文章目录栈 Stack简介栈的核心方法:范例: 观察出入栈队列 Queue简介:Queue 接口主要是进行先进先出的时候, 在这个接口里面有如下的方法:范例: 使用 Queue范例: 利用队列实现生产者与消费者栈 Stack简介栈是一种先进后出的数据结构. 比如是浏览器上的后退, 以及各个编辑器上的撤销操作都属于栈的功能, 而在整个的类集里面, 提供有Stack, 这个类是 Vector 的子类. 但是需要注意的是使用这个子类的时候, 可不是使用 Vector 类的方法, 同样, 使用这个类的时候,原创 2021-01-28 17:20:12 · 228 阅读 · 3 评论 -
Java 类集框架: TreeMap 子类
TreeMap 表示可以排序的Map子类, 它是按照key的内容进行排序的范例: 观察 TreeMap的使用package com.beyond.nothing;import java.util.Map;import java.util.TreeMap;public class test { public static void main(String[] args) { Map<Integer, String> map = new TreeMap<原创 2021-01-28 15:19:52 · 261 阅读 · 6 评论 -
Java 类集框架 : Map 中的 key实现说明
关于 Map 中 key 的说明在使用 Map 集合的时候之前使用的都是系统类作为了 KEY(Integer), 那么实际上用户也可以采用自己的类作为 Key.那么这个时候一定要记得覆写 Object 中的 hashCode() 与 equals() 方法package com.beyond.nothing;import java.util.HashMap;import java.util.Map;import java.util.Objects;class Person { p原创 2021-01-28 14:55:17 · 697 阅读 · 9 评论 -
Java 使用Iterator输出Map 集合
在实际开发之中, 如果你存储数据是为了输出, 那么优先考虑的一定是 Collection, 使用 Map 的主要操作就是设置我们的内容, 然后使用 get()进行查找的.使用Map迭代输出的需求会有, 但是不多. 要明确的是:Map 接口没有iterator()方法在Map 接口里有一个重要的方法, 将 Map 集合转换成 Set 集合:public Set<Map.Entry<K,V>> entrySet()范例: 通过 Iterator输出Map 集合 (要重点掌握原创 2021-01-25 23:27:36 · 511 阅读 · 9 评论 -
Java 集合框架: ConcurrentHashMap
文章目录ConcurrentHashMap首先来观察 ConcurrentHashMap 的子类定义:范例: 使用 ConcurrentHashMapConcurrentHashMapConcurrentHashMap 的特点 = Hashtable 的线程安全性 + HashMap 的高性能在使用 ConcurrentHashMap 处理的时候既可以保证多个线程更新数据的同步, 又可以保证很高效的查询速度.首先来观察 ConcurrentHashMap 的子类定义:public class Co原创 2021-01-25 23:10:12 · 173 阅读 · 1 评论 -
Java 排序算法: 选择排序 (简单选择排序+堆排序)
文章目录五大类内部排序算法简单选择排序: SelectSort算法思路实现简单选择排序 测试80000个随机数据的排序效率堆排序: HeapSort算法思路:实现:堆选择排序 测试八百万个随机数据的排序效率 (还是快排更胜一筹)五大类内部排序算法插入排序交换排序选择排序简单选择排序堆排序归并排序基数排序简单选择排序: SelectSort算法思路选择排序一共有[数组大小-1]轮排序每一轮排序, 又是一个循环, 循环的规约如下先设定当前的这个数是最小值与后面的数据原创 2021-01-25 19:53:25 · 294 阅读 · 1 评论 -
Java : 类集框架 (Map 接口概述) (HashMap + Hashtable)
文章目录Map 接口Map 接口里面的常用方法HashMap 子类 (90%) (无序)范例: Map 基本处理面试题: 请解释 HashMap 原理Hashtable 子类 (1%)范例: 观察 Hashtable (无序)HashMap 与 Hashtable 区别面试题: 请解释 HashMap 与 Hashtable 的区别Map 接口public interface Map<K, V>Collection 集合的特点是每次进行单个对象的保存, 那么如果现在要进行一对对象的保存(偶原创 2021-01-24 21:53:01 · 237 阅读 · 3 评论 -
Java 排序算法: 交换排序 (冒泡排序+快速排序)
文章目录内部排序的五大排序类型冒泡排序(BubbleSort) 及其改进冒泡排序规则:代码实现:冒泡排序 测试80000个随机数据的排序效率快速排序 (QuickSort)基本思想:快速排序 测试80000个随机数据的排序效率内部排序的五大排序类型插入排序交换排序冒泡排序快速排序选择排序归并排序基数排序冒泡排序(BubbleSort) 及其改进冒泡排序规则:一共进行 [数组大小 -1] 次的大循环每一趟大循环的里的小循环(即每一趟)在逐渐的减少[开始也是 数组大小-1原创 2021-01-24 15:30:21 · 144 阅读 · 3 评论 -
Java 集合的输出 (Iterator, ListIterator, Enumeration, foreach)
文章目录1. 迭代输出 : Iterator (95%)案例: 标准的 Iterator 使用案例: 删除元素`以后见到了结合输出的问题, 不需要思考直接使用 Iterator 接口`2. ListIterator 双向迭代接口 (0.01%)观察 ListIterator 接口的使用3. Enumeration 枚举输出 (4.8 %)==但是要如果取得这个接口的实例化对象, 是不可能依靠 Collection, List, Set 等接口的, 只能够依靠 Vector 子类, 因为 Enumeratio原创 2021-01-23 22:28:08 · 468 阅读 · 6 评论 -
Java 递归: 八皇后问题(回溯算法)
八皇后问题, 是一个古老而著名的问题, 是回溯算法的典型案例. 该问题是国际棋棋手马克斯·贝瑟尔于1848年提出: 在 8 ×8格的国际象棋上摆放八个皇后, 使其不能互相攻击即 : 任意两个皇后都不能处于同一行, 同一列 或 同一斜线上, 问有多少种摆法 (92)?思路分析第一个皇后先放到第一行第一列第二个皇后放在第二行第一列, 然后判断是否OK[即判断是否冲突], 如果不OK, 继续放在该行第二列, 第三列, 依次把所有列都放完, 找到一个合适的位置, 执行第三步继续第三个皇后, 还是第一列,原创 2021-01-23 01:32:31 · 287 阅读 · 1 评论 -
Java : Set集合接口 (重复元素的判断)
文章目录`在使用 TreeSet 子类进行数据保存的时候, 重复元素的判断依靠的是 Comparable 接口完成的, 且可以去掉重复元素.``但是, 当我们换成 HashSet 后, 重复数据并不会被去掉.``所以,由于 HashSet 子类与Comparable接口没有任何关系, 所以它判断重复的方式依赖的是 Object 类的两个方法: 这两个方法必须共同完成 `1. hash 码 : public int hashCode();2. 对象比较: public boolean equals(Objec原创 2021-01-20 18:16:26 · 1257 阅读 · 4 评论 -
Java : Set 集合接口(集合排序说明)
TreeSet 排序分析既然 TreeSet子类可以进行排序, 所以下面编写一个自己的类, 希望可以通过 TreeSet实现我们的排序操作.范例: 使用TreeSet排序package com.nothing.dhl;import java.util.Set;import java.util.TreeSet;class Person { private String name; private int age; public Person(String name, int age)原创 2021-01-20 16:39:14 · 259 阅读 · 1 评论 -
Java : Set 集合接口
Set 接口常用子类Set 接口与 List 接口的最大不同在于 Set 接口中的内容是不允许重复的, 同时也需要注意一点, Set 与 List 还有一个最大的不同在于 : Set 接口并没有对 Collection 接口进行扩充, 而 List 进行了扩充, 比如 get() 方法由于是 jdk 1.8的原因, 所以在 Collection 接口里面也提供有一些default方法, 而这些方法并没有在Set接口里出现. 也就是说, Set 接口里面是不可能使用 get() 方法进行处理的, 而在 S原创 2021-01-20 16:11:20 · 142 阅读 · 4 评论 -
Java : List 集合接口 : LinkedList 子类
LinkedList 子类 ( 5 %)在List 接口里面还有一个 LinkedList 子类, 这个子类如果向父接口转型的话, 使用的形式和之前的接口没有任何的区别.案例: 使用 LinkedListpackage com.beyond.dhl;import java.util.LinkedList;import java.util.List;public class TestDemo { public static void main(String[] args) { List&原创 2021-01-16 14:56:24 · 234 阅读 · 5 评论 -
Java : List 集合接口 : Vector 子类
文章目录List 旧的子类: Vector ( 5 %)范例: 使用 Vector面试题: 解释 ArrayList 与 Vector 区别?在以后使用的过程之中优先考虑 ArrayListList 旧的子类: Vector ( 5 %)Vactor 这个类是从 JDK1.0 的时候就提出的, 而 ArraryList 是在 JDK 1.2 提出的, 最初的 Java 在开发类集的时候曾经考虑取消Vactor, 因为它的机制太古老了, 可是后来又考虑有许多的人已经习惯于使用 Vactor了, 那么于是原创 2021-01-16 14:12:17 · 220 阅读 · 3 评论 -
Java : List集合接口
文章目录`在实际的开发过程中, List 集合接口的使用比率可以达到 Collection 系类的 80%, 在进行集合处理的时候, 优先考虑 List 集合接口.`在这个List接口里面有两个重要的扩充方法:ArrayList 子类 (90% 使用)范例: 观察List 基本操作范例: 观察 List 的 get() 操作注意:范例: 通过 Collection 进行输出处理 (`Collection 可没有 get() 方法` )List 与 简单Java 类范例: 向集合保存简单 java类对象注意:原创 2021-01-16 11:54:09 · 270 阅读 · 5 评论 -
Java 类集框架 : Collection 集合接口
文章目录Collection 接口定义总结`add(), iterator() 子接口都有这两个方法`在java的类集里面(java.util 包)提供有两个最为核心的操作接口, Collection, Map 接口, 其中 Collection 接口的操作形式与之前编写链表的操作形式类似, 即每一次进行数据操作的时候只能够对单个对象进行处理.所以 Collection 是单个集合保存的最大父接口Collection 接口定义public interface Collection<E>原创 2021-01-16 10:07:20 · 146 阅读 · 1 评论 -
Java 类集简介(其实是数据结构, 也是动态对象数组)
类集实际上属于动态的对象数组, 那么在实际的开发之中数组的使用出现的机率并不高, 99%情况下使用的都是一维数组, 并且99% 的操作都只是进行简单的for循环处理. 但是必须清楚数组本身有一个最大的缺陷: 数组的长度是固定的.就是此问题的存在, 所以才开发出了链表, 但是对于链表的实现非常的困难, 对于之前写的链表你发现使用的是 Object, 那么就有一个潜在的问题: 如果设置的数据类型不一样, 那么就会造成 ClassCastException(取数据时候比较麻烦).从 jdk1.2 开始,原创 2021-01-16 09:30:11 · 228 阅读 · 3 评论 -
反射与简单java类
文章目录以后所有的项目开发之中一定会存在有反射的应用, 以后使用的所有的开发框架里面到处都是反射的身影, 没有反射, 开发框架的存在意义就没有了.反射与单级类操作设计要求范例: 基本程序单级自动VO设置实现以后所有的项目开发之中一定会存在有反射的应用, 以后使用的所有的开发框架里面到处都是反射的身影, 没有反射, 开发框架的存在意义就没有了.下面将主要结合简单Java类来进行反射开发的深入研究, 同时这些也是后期 SpringMVC, Struts 这些框架的主要工作原理.反射与单级类操作设计要求如原创 2021-01-11 10:41:17 · 95 阅读 · 1 评论 -
Java 实现 中缀表达式(波兰表达式)转后缀表达式(逆波兰表达式)
文章目录中缀表达式转后缀表达式的思路分析步骤`这里括号并不是运算符`代码实现:中缀表达式转后缀表达式的思路分析步骤初始化两个栈 : 运算符栈 s1 和 储存中间结果的栈 s2;从左至右扫描中缀表达式;遇到操作数时, 将其压 s2;遇到运算符时, 比较其与 s1 栈顶运算符的优先级4.1 如果s1为空, 或栈顶运算符为左括号"(", 则直接将此运算符入栈4.2 否则, 若优先级比栈顶运算符的高, 也将运算符压入 s1;4.3 否则, 将s1栈顶的运算符弹出并压入s2中, 再次转到(4.1)与原创 2021-01-03 09:38:22 · 547 阅读 · 1 评论 -
Java 反射编程(下)
文章目录反射与类操作(反射调用方法)调用普通方法(核心)以上两个方法返回的类型是 java.long.reflect.Method 类的对象. 在此类中提供有一个调用的方法支持,即如下`最重要的方法:`案例: 取得一个类中的全部方法案例: 通过反射调用 setter和getter(有明确开发要求)此类操作的好处是 : 不再局限于某一具体类型的对象, 而是可以通过 Object 类型进行所有类的方法的调用反射与类操作(反射调用成员)在Class 类里面提供了有两组取得属性操作的方法:1. 取得包括继承类的原创 2021-01-02 10:40:40 · 616 阅读 · 4 评论 -
Java 反射编程(上)
文章目录**反射的泛型就是用 `? `来描述**反射与类的操作 (取得父类信息)取得父类信息1. 获得本类的包名称:2. 取得父类的Class 对象3. 取得父类接口案例: 使用上述方法反射与类的操作 (反射调用构造)反射调用构造1. 取得指定参数类型的构造2. 取得类中的所有构造`实例化对象: `案例: 取得类中的所有构造方法信息.改进: 使用getName() 方法取得构造方法完整信息案例实现: 自己拼凑构造方法重点:案例: 观察 Class 实例化对象的问题案例: 要通过 Constructor 类实原创 2021-01-01 11:00:28 · 2773 阅读 · 9 评论 -
Java 反射与工厂设计模式
文章目录案例: 编写一个传统的工厂类改进: 通过使用反射来完成处理对象的实例化改进: 使用泛型解决优化工厂设计曾经给过一个原则: 如果是你自己所编写的接口, 要想取得本接口的实例化对象, 最好使用工厂类来设计, 但是也需要知道传统工厂设计所带来的问题.案例: 编写一个传统的工厂类package com.cwq.beyond;interface IFruit{ public void eat();}class Apple implements IFruit{ @Override p原创 2020-12-31 19:35:15 · 467 阅读 · 5 评论 -
Java Class 类的三种实例化模式
文章目录1. 任何的实例化对象可以通过 Object 类中的 getClass() 方法取得 Class 类对象:注意:在反射的世界里, 该方法中的泛型只能用 `?` 来体现, 这时候可以理解为是调用 Object 类进行操作处理, 而如果写入实际的类型则会报错.2. "类.class" : 直接根据某一个具体的类来取得Class 类的实例化对象;3. 使用 Class 类提供的方法:反射实例化对象第二种实例化对象的方式Class 类是描述整个类的概念, 所以也是整个反射的操作源头, 那么在使用Clas原创 2020-12-31 18:29:55 · 1245 阅读 · 7 评论 -
Java IO编程 : 对象序列化 (简述 transient 关键字)
文章目录序列化的基本实现`实际上序列化类保存的就是二进制流的属性`案例: 使用序列化对接口实现序列化与反序列化操作ObjectOutputStream 序列化类的定义结构和构造方法序列化操作ObjectInputStream 反序列化类的定义结构和构造方法反序列化操作结果:总结:在以后实际的项目开发之中, 总会有自动的容器帮助你做序列化与反序列化, `序列化就是将对象变成 二进制数据流`所有的项目开发一定都有序列化的概念存在.序列化的基本实现所谓的对象序列化指的是在我们内存中保存的对象变为二进制流的原创 2020-12-28 20:59:56 · 336 阅读 · 1 评论 -
Java数据结构 利用数组模拟栈实现综合计算器
文章目录栈的核心简介栈的应用场景1. 子程序的调用:2. 处理递归调用3. 表达式的转换与求值4. 二叉树的遍历5. 图形的深度优先(depth-first)搜索利用数组模拟栈实现综合计算器栈的核心简介stack, 是一个先入后出(FILO-First In Last Out) 的有序列表, 是一个带限制的线性表,对于该表中的插入和删除只能在栈顶这一端进行, 而另一端为固定的一端, 称为栈底出栈使用 pop()入栈使用 push()栈的应用场景1. 子程序的调用:在跳往子程序前, 会向将下一个原创 2020-12-28 10:21:00 · 356 阅读 · 1 评论 -
Java IO编程: Scanner类
打印流解决的是OutputStream的缺陷, BufferedReader解决的是InputStream的缺陷, 而java.util.Scanner解决的是BufferedReader类的缺陷(替换了 BufferedReader类)Scanner类 是一个专门进行输入流处理的程序类, 利用这个类可以方便的处理各种数据类型, 同时也可以结合正则表达式进行各项处理, 在这个类中主要关注以下的方法:判断是否有指定类型的数据: public boolean hasNextXxx()取得指定类型:原创 2020-12-27 19:34:37 · 332 阅读 · 0 评论 -
Java BufferedReader 类
文章目录BufferedReader 类范例: 利用BufferedReader实现数据从键盘输入范例: 由键盘输入数字BufferedReader 类属于一个缓存的输入流, 而且是一个字符流的操作对象但是对于缓存流, java中有两类: 一类是字节缓存流(BufferedInputStream ), 一类是字符缓存流(BufferedReader)。BufferedReader 类public String readLine() throws IOException原创 2020-12-27 17:04:48 · 526 阅读 · 2 评论 -
Java System类对IO的支持(系统输出与系统输入)
文章目录System类对IO的支持,含有3个常量标准输出(输出给显示器:)标准输入(从键盘输入)错误输出注:系统输出:案例: 使用 System.out 为OutputStream 实例化总结:System类对IO的支持,含有3个常量java.lang.Object java.lang.System 标准输出(输出给显示器:)public static final PrintStream out标准输入(从键盘输入)public static final InputStream in原创 2020-12-27 15:31:07 · 355 阅读 · 0 评论 -
Java 打印流格式化文本信息(理解)
文章目录注意:格式化输出:案例: 观察格式化输出补充:案例: 格式化字符串注意:C 语言中有一个printf 函数, 这个函数在输出的时候可以使用一些占位符, 例如: 字符串(%s),数字(%d),小数(%m.nf), 字符 (%c) 等.从JDK1.5之后, java也追加了同样的方法, printf()格式化输出:public PrintStream format(String format, Object... args)案例: 观原创 2020-12-26 17:46:31 · 406 阅读 · 0 评论 -
Java 使用系统打印流
注:打印流有字节打印流: PrintStream, 字符打印流 PrintWriter 的几率挺高的, 他们的使用方法是大致相同的, 首先观察这两个类的继承结构和构造方法:PrintStream, PrintWriter 继承结构java.lang.Object java.io.OutputStream java.io.FilterOutputStream java.io.PrintStream java.lang.Object java.io.Writer java.原创 2020-12-26 17:31:34 · 270 阅读 · 2 评论