- 博客(35)
- 收藏
- 关注
原创 基数排序算法
package sort;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.List;import java.util.Map;/** * 基数排序 * */public class Radix10 { public static void main(String[] args) { int[] arr1 = {44,38,5,47,15,31
2021-06-24 16:37:09 104
原创 计数排序算法
package sort;import java.util.Arrays;/** * 计数排序 * */public class Counting9 { public static void main(String[] args){ int[] array={95,94,91,98,99,90,99,93,91,92}; int[] sortedArray=countSort(array); System.out.println(Arrays
2021-06-24 16:35:58 81
原创 桶排序算法
package sort;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;/** * 桶排序 * */public class Bucket8 { public static void main(String[] args) { int[] arr1 = {44,38,5,47,15,31,32,88,2,23,43,54,1,7,56,100,101,102}; i
2021-06-24 16:35:03 92
原创 快速排序算法
package sort;import java.util.Arrays;/** * 快速排序 * */public class Quick7 { public static void main(String[] args) { int[] arr1 = {44,38,5,47,15,31,32,88,2,23,43,54,1,7,56,100,101,102}; quickSort(arr1); System.out.println(Arrays.toString(ar.
2021-06-24 16:32:49 84
原创 归并排序
1.思路:将数组递归二分,从最底层开始比较交换并向上层合并,合并后的数组就是有序数组2.图片演示3.代码演示:package sort;import java.util.Arrays;/** * 归并排序 * 将数组递归二分,从最底层开始比较交换并向上层合并,合并后的数组就是有序数组 */public class Merge6 { public static void main(String[] args) {// int[] arr1 = {44,38,5,47,15,31
2020-07-27 17:04:52 86
原创 堆排序
1.思路:首先将待排序数组构建成一个二叉堆,其次每一轮比较都将最大值上浮到堆顶,然后将最大值与本轮参与比较的最后一个数值交换位置,这样从后向前依次循环递归比较交换,最后就可得到一个按顺序从小到大排列的数组。2.图片演示:3.代码演示:package sort;import java.util.Arrays;/** * 堆排序 * 使用二叉堆的性质,将最大值放在数组的最后 */public class Heap5 { public static void main(String
2020-07-27 16:06:49 102
原创 希尔排序
1.思路:打破只能相邻元素比较的局限,以可变间距比较两个元素的大小,可变间距以数组长度的二分之一开始,直至变为1结束。通过多轮不同间距的比较之后,数组变得有序。2.图片演示:3.代码示例:package sort;import java.util.Arrays;/** * 希尔排序 * */public class Shell { public static void main(String[] args) { int[] arr1 = {44,38,5,47,15,31,3
2020-07-14 14:15:36 76
原创 插入排序
1.思路:n个数排序,依次取出第二到第n个数作为待插入数,向前比较,如果比前面数字大,将前面数字后移,直至将待插入数字插入到合适的位置。2.图片示例:3.代码示例:package sort;import java.util.Arrays;/** * 插入排序 */public class Insertion { public static void main(String[] args) { int[] arr1 = {44,38,5,47,15,31,32,88,2,23,4
2020-07-10 16:35:11 99
原创 选择排序
1.思路:n个数进行选择排序,第一趟排序,将第一个数设置为最小值,并逐个向右比较,如果有更小的数字,将该数字设置为最小值,并将该数字与第一个数字交换位置;第二趟排序将第二个数设置为最小值,并逐个向右比较,选择出最小值并与第二个数交换;以此类推,第n-1趟,第n-1个数与第n个数比较交换,排序结束。2.图片演示:3.代码示例:package sort;import java.util.Arrays;/** * 选择排序 */public class Selection { publi
2020-07-10 15:47:25 125
原创 冒泡排序
1.思路:有n个数,第一趟从第一个数开始,依次与右边的数比较,如果比右边的数大则交换,这样第一趟比较和交换过后大的数会在最右边;再从第一个数开始向右比较交换得到第二大的数;以此类推,经过n-1趟比较交换,可得到有序数列。代码中还展示了两种经过优化的冒泡排序,优化一的思路是某一趟排序没有发生过交换,说明数列已经有序,不需要再进行后续的比较和交换;优化二的思路是跳跃式的修改每次比较交换的边界,从而减少了循环和比较的次数。2.图片演示:3.代码示例:package sort;import java
2020-07-10 15:19:36 207
原创 设计模式总纲
1 六大原则1.1 单一职责原则单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。1.2 里氏替换原则里氏替换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生...
2020-04-28 11:03:09 118
原创 享元模式
享元模式是一种比较简单的模式,其实就是一个有缓存的工厂。享元模式旨在减少重复对象的创建和销毁,减少内存使用,一般需要使用池的概念的时候就需要使用享元模式,比如常量池,线程池等。package flyWeight;public interface ICrayon { void draw(String name);}package flyWeight;public class Cr...
2020-04-28 10:28:12 96
原创 外观模式
外观模式是一种比较简单的模式,即使从来没听说过这种模式,也可能在实际工作中经常使用它。它旨在为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。比如X系统有ABC三个独立的接口,外部系统Y要求再开一个接口,需要以特定逻辑整合ABC的功能,并添加功能D,并且还需要屏蔽掉某些返回的字段,其实就是在使用facade模式。package facade...
2020-04-27 17:47:09 133
原创 组合模式
组合模式通过子类聚合父类,从而解决树形结构的整体-部分问题。典型的例子有公司架构体系,文件系统等。组合模式有两种类型:安全模式和透明模式。安全模式:Component中只保留最基础的功能,差异性功能都留到子类去实现。透明模式:Component中定义全部功能,叶子节点会冗余多余功能。安全模式:package composite.safeComposite;public abstra...
2020-04-27 15:33:22 120
原创 桥接模式
桥接模式用于有两个独立的互不相干的维度,而且每个维度都可以单独变化。最经典的模式就是蜡笔和颜色模型。本例以dota英雄以及其神符状态为例写了一个demo。当然也不使用桥接状态,直接给每个英雄都添加一个状态实现类,也能实现类似功能。如果这样实现的话,类的数量会极具增加,而且每新建一个新状态都需要给每一个英雄添加一个实现类,而每添加一个英雄也都要对每一个状态添加实现类,不易扩展和维护。如果再...
2020-04-27 11:24:14 165
原创 适配器模式
适配器模式一般用于接口转换,文中以英式中式插头转换为例创建demo。适配器模式分以下两种:对象适配器和类适配器对象适配器:以聚合方式实现package adapter;public interface EnglishPlug { void charge();}package adapter;public class EnglishPlugImpl implements E...
2020-04-26 17:58:49 148
原创 访问者模式
访问者模式是一种比较复杂且不常用的例子。访问者模式是为了解决稳定的数据结构和易变的操作耦合问题。一个类的结构很少改变,但经常需要在此类中定义新的操作。 在需要对这个类定义很多不同的并且不相关的操作,而且要避免让这些操作"污染"这个类,也不希望在增加新操作时修改这个类,就需要使用visitor pattern。提到访问者,一下就想起了看望病人的例子,这里就以探望病人为例写个demo,虽然简单,...
2020-04-26 16:18:04 135
原创 解释器模式
解释器模式一般用于不同语言的转换,在工作中使用较少。本例中以简单的java转sql示例演示。package interpreter;import java.util.HashMap;import java.util.Map;public class Context { private String tableName; Map<String,String> p...
2020-04-26 11:31:13 147
原创 备忘录模式
java:package memento;/** * 暗黑破坏神存档 */public class GameOriginer { int blood=100; int magic=100; String location="嗜血荒野"; String equipment="赤手,光脚"; public Memento storeGame() { retu...
2020-04-24 12:41:37 149
原创 状态模式
java:package state;public interface State { void attack(); void move();}package state;public class FirstGearState implements State{ @Override public void attack() { System.out.print...
2020-04-24 10:14:08 93
原创 观察者模式
java:package observer;public interface Observer { void update(int newPrice); }package observer;public class User1 implements Observer{ @Override public void update(int newPrice) { Sys...
2020-04-23 18:05:02 106
原创 迭代器模式
java:package iterator;public class Ninja { String name; String skill; //用于链表结构 Ninja next; public Ninja(String name, String skill) { super(); this.name = name; this.skill = skill...
2020-04-23 14:03:21 108
原创 策略模式
java:package strategy;public interface EquipmentStrategy { void produce();}package strategy;public class BattleFuryStrategy implements EquipmentStrategy{ @Override public void produce() {...
2020-04-22 17:33:25 112
原创 责任链模式
java:package chain;public class LeaveInfo { String name; int days; public LeaveInfo(String name, int days) { super(); this.name = name; this.days = days; } public String getName(...
2020-04-22 16:21:02 138
原创 命令模式
java:package command;public interface Appliance { void on(); void off();}package command;public class Light implements Appliance{ @Override public void on() { System.out.println("开...
2020-04-22 15:06:39 205
原创 中介者模式
java:package media;public class Media { User user1; User user2; User user3; public Media(User user1, User user2, User user3) { super(); this.user1 = user1; this.user2 = user2; this....
2020-04-22 10:43:56 108
原创 模板方法
java:package template;public abstract class CarTemplate { public abstract void installWheel(); public abstract void installEngine(); public abstract void paint(); public abstract void innerDe...
2020-04-21 18:08:40 117
原创 原型模式
java:package prototype;import java.util.List;public class ExamPaper implements Cloneable{ String subject; int maxScore; List<String> questions; public ExamPaper(String subject, int ...
2020-04-21 17:34:18 106
原创 建造者模式
java实现:package builder;public interface WheelFactory { void getWheel();}package builder;public class BenzWheelFactory implements WheelFactory{ @Override public void getWheel() { System.o...
2020-04-21 16:58:12 115
原创 代理模式
java实现:package proxy;public interface People { void speak();}package proxy;public class Chinese implements People{ @Override public void speak() { System.out.println("说中文"); }}packa...
2020-04-16 18:20:51 105
原创 装饰器模式
java实现:package decorator;public interface ICoffee { void makeCoffee();}package decorator;public class Coffee implements ICoffee{ @Override public void makeCoffee() { System.out.println("...
2020-04-16 18:08:43 101
原创 动态代理
动态代理相比静态代理(23种涉及模式之一)优势在于:动态生产代理类,减少编译期静态代理类的数量1.jdk动态代理:被代理的对象必须是接口package jdkProxy;public interface People { void speak(); void eat();}package jdkProxy;public class Chinese implements Pe...
2020-04-16 17:07:14 178
原创 抽象工厂
java实现:package designMode.abstractFactory;public interface EngineFactory { void produceEngine();}package designMode.abstractFactory;public class BenzEngineFactory implements EngineFactory{...
2020-04-11 22:02:31 116
原创 工厂模式
java实现:简单工厂:package designMode.factory;import designMode.model.Benz;import designMode.model.Bmw;import designMode.model.Car;public class SimpleFactory { public static Car getCar(String br...
2020-04-11 21:11:07 105
原创 单例模式
单例模式欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全...
2020-04-11 13:54:33 110
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人