自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分治算法(汉诺塔)

package com.dk.dac;public class Hanoitower { public static void main(String[] args) { hanoiTower(3,'A','B','C'); } //汉诺塔移动方法(使用分治算法) public static void hanoiTower(int num,char a,char b,char c){ //如果只有一个盘 if (...

2020-07-03 17:37:12 165

原创 二分查找(非递归算法)

package com.dk.binarysearchnorecursion;public class BinarySearchNoRecursion { public static void main(String[] args) { //测试 int[] arr = {1,3,8,10,11,67,100}; int index = binarySearch(arr,1); System.out.println("index=

2020-07-03 17:32:04 348

原创

//创建图package graph;import java.util.ArrayList;import java.util.Arrays;public class Graph { //存储顶点String,使用ArrayList(2)保存矩阵int[][]edges private ArrayList<String> vertexList;//存储顶点集合 private int[][] edges;//存储图对应的邻接矩阵 private int numOfE...

2020-07-03 15:57:31 137

原创 Java设计模式-6.模板设计模式

模板设计模式就是定义一个算法的骨架,而将具体的算法延迟到子类实现优点:在定义算法骨架的同时,可以很灵活的实现具体的算法,满足用户灵活多变的需求缺点;如果算法骨架修改的话,就要修改抽象类package day27;public class Dk4Template { //模板设计模式 //计算程序运行时间 public static void main(String[] args) { Demo d = new Demo(); System.out.println(d.getTime

2020-07-01 21:47:20 71

原创 Java设计模式-5.适配器设计模式

在使用监听器的时候,需要定义一个类事件监听器接口,通常接口中有多个方法,而程序中不一定都用到,但又必须重写很繁琐,定义监听器时只要继承适配器,然后重写需要的方法。适配器原理:适配器就是一个类,实现了监听器接口,所有抽象方法都重写了,但是方法都是空的,只重写需要的方法。package day25;public class Dk9Adapter { //适配器设计模式 public static void main(String[] args) { // TODO Auto-generated

2020-07-01 21:45:31 80

原创 Java设计模式-4.工厂方法模式

抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现(每个类有一个工厂)优点:客户端不需要负责对象的创建,从而明确各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码缺点:需要额外的编写代码,增加了工作量package day25;public interface Factory { public Animal createAnimal();}package day25;public class DogFactory i

2020-07-01 21:43:10 53

原创 Java设计模式-3.简单工厂模式

定义一个具体的工厂类负责创建一些类的实例优点:客户端不需要负责对象的创建,从而明确各个类的职责缺点:这个静态工厂类负责所有对象的创建,如果有新的对象的增加,或者某些对象的创建方式不同,就需要不断修改工厂类,不利于后期维护package day25;public abstract class Animal { public abstract void eat();}/** * */package day25;/** * @author Dk * */public cla

2020-07-01 21:41:11 75

原创 Java设计模式-2.单例设计模式

确保一个类只有一个实例(举例:任务管理器、Runtime类)饿汉式和懒汉式区别:单线程饿汉式:空间换时间(一上来就直接创建对象)更好懒汉式:时间换空间(没有直接创建对象)多线程饿汉式:没有安全隐患懒汉式:可能会出现安全隐患,会创建多个对象package day25;public class Dk1Singleton { //单例设计模式 //类只能创建一个对象 public static void main(String[] args) { /*由于加入priva

2020-07-01 21:39:31 84 1

原创 Java设计模式-1.装饰设计模式(IO流)

package day21;public class Dk3Wrap { //装饰设计模式 //优点:耦合性降低,被装饰类可以被装饰也可以不被装饰,也可以选择其他的装饰 public static void main(String[] args) { ItcastStudent is = new ItcastStudent(new Student()); is.code(); }}interface Coder{ public void code();}class S

2020-07-01 21:38:06 81

原创 Java反射

1.反射机制反射三种实现方式:package day27;import day17.Person;public class Dk1Reflect { //反射 public static void main(String[] args) throws ClassNotFoundException { //第一种方式 Class clazz1 = Class.forName("day17.Person"); //第二种方式字节码对象 Class clazz2 = Perso

2020-07-01 21:36:02 65

原创 Java网络编程

端口号范围:0~65535,建议选择1024以上UDP:面向无连接,数据不安全,速度快,不区分客户端和服务器(有发送端和接收端)(发短信)TCP:面向连接(三次握手),数据安全,速度略低,分为客户端和服务器(打电话)1.UDPpackage day26;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;im

2020-07-01 21:30:59 151

原创 Java多线程

线程就是程序执行的一条路径创建线程两种方式对比:继承Thread:可以直接使用Thread类中的方法,代码简单。但如果已经有了父类就不能使用这个方法(优先考虑)实现Runnable接口:有了父类也没有关系,父类也可以实现接口,而且接口可以多实现。但需要先获得Thread对象后,才能获得Thread方法,代码复杂两种方式源码对比:继承Thread:由于子类重写了Thread类的run()方法,当调用start()方法,直接找子类的run()方法实现Runnable接口:构造方法传入了Runn

2020-07-01 21:28:50 73

原创 JavaIO流-6.数据流

package day22;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class Dk4Data { public static void

2020-06-29 08:11:27 81

原创 JavaIO流-5.打印流

PrintStream既可以直接输出字符串print(),println()。也可以会根据编码表转换write()package day22;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.InputStrea

2020-06-29 08:09:50 66

原创 JavaIO流-4.内存输出流

解决读取中文出现乱码问题,读取全部字节,可能会出现内存溢出package day22;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class Dk2ByteArrayOutputStream { //解决读取中文乱码问题,在内存中创建文件大小的字节数组 public

2020-06-29 08:07:43 95

原创 JavaIO流-3.序列流

可以多个文件写入一个文件package day22;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.SequenceInputStream;import java.util.Enumeration;import java.util.Vector;publ

2020-06-29 08:05:16 59

原创 JavaIO流-2.字符流

字节流可以处理任意类型数据字符流只能处理纯文本字符流读取字符,就要先读取到字节数据,然后转换为字符,如果要写出字符,要把字符转成字节再写出去。拷贝纯文本字节流比字符流更好:操作纯文本的时候字符流在只读(一次读取一个字符)和只写(可以直接写出字符串(底层把字符转化为字节数组写出去了)表面不用转换,而字节流需要转化为字节数组)的时候好用。字符流拷贝非纯文本文件和拷贝纯文本文件是一样的,需要先将字节转换为字符,转换字符如果没有成功就会变成?,写出去的时候也写的是?package day21;im

2020-06-29 08:02:58 163

原创 JavaIO流-1.字节流

字节流可以处理任意类型数据字符流只能处理纯文本在创建对象时,new后面报错,不是大圆形错,是小方块的错,就是异常,ctrl+1抛出异常信息read()方法每次返回一个字节,为什么用int类型来接收?:因为字节输入流可以操作任意类型的文件,比如图片文件,底层都是以二进制形式存储的,如果每次读取返回byte,有可能读到中间的时候读到11111111(是byte类型的-1)程序遇到-1就不读了,后面的就读不到了,如果用int类型接收,会在11111111前面补上24个0,凑足4个字节,那么byte类型的-

2020-06-29 07:57:05 151

原创 多路查找树

2020-06-29 07:45:18 71

原创 平衡二叉树

平衡二叉树是在二叉排序树的基础上实现的package avl;public class AVLTreeDemo { public static void main(String[] args) { int[] arr = {4,3,6,5,7,8}; //创建一个AVLTree对象 AVLTree avlTree = new AVLTree(); //添加结点 for (int i = 0; i < arr.length; i++) { avlTree

2020-06-29 07:40:26 63

原创 二叉排序树

package binarysorttree;public class BinarySortTreeDemo { //二叉排序树 public static void main(String[] args) { int[] arr = {7,3,10,12,5,1,9,2}; BinarySortTree binarySortTree = new BinarySortTree(); //循环添加结点到二叉排序树 for (int i = 0; i < arr.leng...

2020-06-29 07:33:52 59

原创 哈夫曼编码

赫夫曼编码是无损压缩,可以完整恢复赫夫曼树排序方法不同,则赫夫曼编码不同。package calculate;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.ObjectInputStream...

2020-06-28 16:45:39 309

原创 哈夫曼树

给定n个权值作为n个叶子节点,构造一棵二叉树,若该树的**带权路径长度(wpl)**达到最小,这样的二叉树称为最优二叉树也称为哈夫曼树或霍夫曼树哈夫曼树是带权路径长度最短的树,权值较大的节点离根较近package calculate;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class HuffmanTree { public static void mai

2020-06-28 16:18:12 145

原创 堆排序

package calculate;import java.util.Arrays;public class HeapSort { //堆排序 public static void main(String[] args) { //将数组升序排列(大顶堆) int[] arr = {4,6,8,5,9}; heapSort(arr); } //编写堆排序的方法 public static void heapSort(int[] arr) { int temp; .

2020-06-28 16:11:43 73 1

原创 二叉树

数组扩容分析:撤入删除效率低ArrayList底层存储(就是数组扩容)分析:链式存储分析:插入,删除效率较高。但检索时需要从头遍历,效率很低。树存储分析:树插入,删除,检索效率都很高。树示意图:二叉树概念:前序遍历:先输出父节点,再遍历左子树和右子树中序遍历:先遍历左子树,再输出父节点,最后遍历右子树后序遍历:先遍历左子树,再遍历右子树,最后输出父节点**小结:*...

2020-03-27 22:26:51 55

原创 27. 移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 ...

2020-03-24 08:45:13 57

原创 哈希表

使用哈希表管理雇员信息:package calculate;import java.util.Scanner;public class HashTab { public static void main(String[] args) { //创建哈希表 HashTableDemo hashTableDemo = new HashTableDemo(7); //...

2020-03-23 17:00:37 99

原创 Java-File类

File更应该叫做文件路径,或者文件夹路径package day18;import java.io.File;import java.io.FilenameFilter;public class Dk8File { //判断F盘目录下是否有后缀名.jpg的文件,如果有就输出该文件名称 public static void main(String[] args) { File ...

2020-03-23 15:08:49 49

原创 Java-异常

JVM如何处理异常:main函数收到问题后,有两种方式:自己将该问题处理,然后继续运行自己没有针对的处理方法,只有交给调用main的jvm处理jvm有一个默认的异常处理机制,就将该异常处理,就将该异常名称信息位置打印在控制台世界上最真情的相依,是你在Try,我在Catch,无论你发什么脾气,我都默默接受处理异常:编译时异常:未雨绸缪,要提前想到可能会发生什么事运行时异常:编译...

2020-03-23 09:41:22 55

原创 26. 删除排序数组中的重复项

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 ...

2020-03-22 23:10:13 57

原创 21. 合并两个有序链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4/** * Definition for singly-linked list. * public class ListNode { * int ...

2020-03-22 23:08:38 70

原创 查找

线性查找package calculate;public class SeqSearch { //线性查找 public static void main(String[] args) { int[] arr = {-1,34,89}; System.out.println(seqSearch(arr, 34)); } public static int seqSearc...

2020-03-22 18:01:54 169

原创 Java集合框架-5.Collections类

collections是集合工具类collection是单列集合的根接口package day18;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.TreeSet;public class Dk5Poker { //模拟斗地主 ...

2020-03-22 15:55:25 80

原创 Java集合框架-4.Map

Map集合中的keySet()方法:package day18;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.Set;public class Dk1KeySet { //通过KeySet()方法对hashset迭代 public st...

2020-03-22 15:49:58 57

原创 20. 有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例 4:输入:...

2020-03-21 00:11:56 48

原创 Java集合框架-3.Set

List:有索引,有序(存和取一致),可以重复Set:无索引,无序(存和取不一致),不可以重复 public static void demo1() { HashSet<String> hs = new HashSet<String>(); boolean b1 = hs.add("a"); hs.add("b"); hs.add("c"); ...

2020-03-20 17:58:10 79

原创 排序

排序算法:内部排序:值将需要处理的数据加载到内存进行排序插入排序直接插入排序希尔排序选择排序简单选择排序堆排序交换排序冒泡排序快速排序归并排序基数排序(桶排序)外部排序:数据量过大,必须借助外存算法时间复杂度:时间频度:一个算法中的语句执行次数称为语句频度或时间频度T(n)时间复杂度:O(1) <O(logn)<O(n...

2020-03-20 17:45:58 64

原创 Java集合框架-2.List

//ListItorator是List特有的,Itorator也有List list = new ArrayList();list.add("a");list.add("b");list.add("c");list.add("d");ListItorator lit = list.ListItorator();while(lit.hasNext()){ ...

2020-03-19 12:12:24 141

原创 Java集合框架-1.Collection

数组弊端:长度固定,不能自动增长,所以有集合。对象数组的内存图解:基本数据类型存储的是值,引用数据类型存储的是对象的地址值数组和集合区别:数组可以存储基本数据类型,也可以存储引用数据类型,集合只能存储引用数据类型集合长度可变,可以根据元素增加而增长(增加原数组的1.5倍)//集合中Iterator迭代方法Collection c = new ArrayList();c.ad...

2020-03-19 12:09:52 62

原创 14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。解:class Solution { publi...

2020-03-18 21:29:40 52

空空如也

空空如也

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

TA关注的人

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