
手写系列
Jaymeng8848
攀爬每一个巨人,站在他们肩膀上看一看
展开
-
【手写排序】二路归并排序
/** * <p>@author Jay</p> * <p>@date 2020/9/3 8:43</p> * <p>@Description:</p> * */public class mergeSort { //两路归并算法,两个排好序的子序列合并为一个子序列 public static void merge(int[] a, int left, int mid, int right) {原创 2020-09-03 10:10:32 · 205 阅读 · 0 评论 -
【手写系列】红黑树
Map对于Java集合的重要性不必多说,要理解其底层原理,红黑树不了解是不行的public class RBTree<T extends Comparable<T>> { private RBTNode<T> mRoot; // 根结点 private static final boolean RED = false; private static final boolean BLACK = true; public clas原创 2020-07-21 21:24:15 · 122 阅读 · 0 评论 -
【手写系列】映射
映射接口:package com.example.demo.handwrite;/** * @author Jay * @date 2020/7/14 10:02 * @Description: */public interface Map<K,V> { void add(K key,V value); V remove(K key); void set(K key,V newValue); V get(K key); boolean is原创 2020-07-20 21:15:03 · 234 阅读 · 0 评论 -
【手写系列】快速排序
快速排序对于程序员来说太重要,值得好好学习了理解, 我也是花了一上午才研究明白。重要的已经写在代码里,直接看注释把。普通版快排:/** * @author Jay * @date 2020/7/13 11:27 * 选择排序 * @Description:快速排序基础版 * 时间复杂度和分组的次数和趟数有很大关系 * 不足点:当为逆数组时,每趟下来,下次会造成分组只有一个,就会走n-1趟 * 常规就不然,所有需要改进。 * */public class quickSortNormal原创 2020-07-16 11:39:42 · 281 阅读 · 0 评论 -
【学习设计模式+手写】适配器模式
适配器模式总的来说分为三种:类适配器,对象适配器,接口适配器。这里只总结两种也是因为类适配器很简单并且对象适配器就是在类适配器上做改造因此懂得了对象适配器,类适配器一想就明白。适配器模式和生活中的充电线转换头很像,因此以此来当作例子会很容易明白。适配器就相当于一根安卓线要通过转换头去给苹果手机充电。接下来就是我自己手写的充电代码:对象适配器:/** * @author Jay * @date 2020/7/15 19:26 * @Description: * 安卓线 */public原创 2020-07-15 20:40:15 · 258 阅读 · 0 评论 -
【学习设计模式+手写】观察者模式
观察者模式在实际运用中非常广泛:非常值得学习,代码也不难,无非两个结构两个实现类,通过业务逻辑编织。直接上代码/** * @author Jay * @date 2020/7/15 18:34 * @Description: */public interface Observer { public void collect(String message);}/** * @author Jay * @date 2020/7/15 18:33 * @Description:原创 2020-07-15 18:55:44 · 220 阅读 · 0 评论 -
【学习设计模式+手写】建造者模式
建造者模式:优点:使用建造者模式可以使客户端不必知道产品内部组成的细节。具体的建造者类之间是相互独立的,这有利于系统的扩展。具体的建造者相互独立,因此可以对建造的过程逐步细化,而不会对其他模块产生任何影响。缺点:建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。适用场景:产品类非常复杂或者产品类因为调用顺序不原创 2020-07-15 16:51:30 · 176 阅读 · 0 评论 -
【手写系列】集合
集合基于二叉搜索树和单链表实现。另外实现单链表主要是比较他们的效率,且二叉搜索树的最坏时间复杂度会退化为一条单链表,时间复杂度也会变为O(log2 n)单链表集合:/** * @author Jay * @date 2020/7/14 9:47 * @Description:单链表集合 */public class LinklistSet<E extends Comparable<E>>implements Set<E> { LinkList<原创 2020-07-14 10:00:11 · 176 阅读 · 0 评论 -
【手写系列】二叉搜索树BST
Binary Search Tree:/** * @author Jay * @date 2020/7/10 10:22 * @Description: */public class BST <E extends Comparable<E>> { private class Node{ private E e; private Node left,right; public Node(E e){原创 2020-07-14 09:35:08 · 151 阅读 · 0 评论 -
【手写系列】直接选择排序
直接插入排序:/** * @author Jay * @date 2020/7/13 11:57 * 选择排序 * @Description:直接选择排序 */public class selectSort { public int[] SelectSort(int []a){ for (int i = 0; i <a.length; i++) { int min=i; int temp; fo原创 2020-07-13 14:19:18 · 119 阅读 · 0 评论 -
【手写系列】折半插入排序
折半插入排序:/** * @author Jay * @date 2020/7/13 10:28 * 插入排序 * @Description:折半插入排序 */public class binSort { public int[] BinSort(int[] a) { for (int i = 1; i < a.length; i++) { int low=0,high=i-1,mid; //查找位置原创 2020-07-13 11:11:36 · 128 阅读 · 0 评论 -
【手写系列】冒泡排序
冒泡排序:/** * @author Jay * @date 2020/7/13 10:12 * 交换排序 * @Description:冒泡排序 */public class bubbleSort {//中心思想,把每次比较大的数往后搬运,每趟最后会得到这一趟最大的数在末尾 public int[] BubbleSort(int[] a) { for (int i =1; i<a.length; ++i) { for (int j =原创 2020-07-13 10:25:57 · 250 阅读 · 0 评论 -
【手写系列】希尔排序
希尔排序:/** * @author Jay * @date 2020/7/12 19:51 * @Description:希尔排序 */public class shellSort { public int[] ShellSortSimple(int[] a) { for (int gap = a.length / 2; gap > 0; gap /= 2) { for (int i = gap; i < a.length; i++)原创 2020-07-13 10:11:32 · 143 阅读 · 0 评论 -
【手写系列】直接插入排序
插入排序之直接插入排序:/** * @author Jay * @date 2020/7/11 19:00 * @Description: 直接插入排序 */public class insertSort { public int[] InsertSortP(int[] a) { for (int i = 1; i < a.length; i++) { int j = i - 1; int temp = a[i];原创 2020-07-12 19:43:11 · 164 阅读 · 0 评论 -
【学习设计模式+手写】jdk动态代理与cglib动态代理(代理设计模式)
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。提一下静态代理接口/** * 接口 * @author Jay * @date 2020/7/10 11:38 * @Description: */public inter原创 2020-07-10 16:25:17 · 187 阅读 · 0 评论 -
【手写系列】栈
栈的实现和大多数数据结构一样,底层依靠的是动态数组和链表,也就是数据结构里的顺序表和链表1.顺序栈`/** * @author Jay * @date 2020/7/10 8:55 * @Description: */public class ArrayStack <E> { Array<E> array; public ArrayStack (){ array=new Array<>(); } public原创 2020-07-10 09:34:20 · 123 阅读 · 0 评论 -
【手写系列】队列
队列的三种实现1.数组队列/** * @author Jay * @date 2020/7/8 19:39 * @Description: */public class ArrayQueue<E> { private Array<E> array; public ArrayQueue(int capcity){ array=new Array<>(capcity); } public ArrayQueu原创 2020-07-09 22:33:57 · 166 阅读 · 0 评论 -
【手写系列】单链表
仅学习复习/** * @author Jay * @date 2020/7/7 15:27 * @Description: */public class LinkList<E> { private class Node{ public E e; public Node next; public Node(E e,Node next){ this.e=e; this.next=原创 2020-07-07 22:12:32 · 186 阅读 · 1 评论 -
【手写系列】动态数组
仅供学习,有参考其他博客。尽可能接近ArrayListimport java.util.Iterator;import java.util.NoSuchElementException;/** * @author Jay * @date 2020/7/7 13:52 * @Description: */public class Array <E> implements Iterable<E>{ //参数化类型 private E[] data;原创 2020-07-07 14:52:22 · 173 阅读 · 0 评论 -
【手写系列】新篇章
学习了很久,数据结构,java基础以及大大小小的框架,总是看的比动手的多,有很多概念以及算法当初记得过后就忘记,才觉得即使是计算机方面也要勤写笔记,勤动手,所以就开始这个系列提高自己,希望坚持和进步...原创 2020-07-07 14:12:15 · 95 阅读 · 0 评论