- 博客(39)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 java七大排序(冒泡、选择、shell、插入、快排、归并、堆排) 图文详解
java 七大排序一共有7种排序1、冒泡排序所以时间复杂度最好和最坏都是O(n^2),空间复杂度为O(1) 很稳定但是加一个判断语句Swap之后:时间复杂度最好O(n),最坏是O(n^2),避免了数组原来有序,导致许多无用功。空间复杂度为O(1) ,很稳定。public class maopao { private static void bubbleSort(int []...
2019-03-29 23:39:53
431
原创 面试常见Spring问题
Spring是什么? Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。主要由以下几个模块组成:Spring C...
2019-09-15 12:26:19
206
原创 面试必问SQL语句练习35题(mysql版)
表名和字段–1.学生表Student(s_id,s_name,s_birth,s_sex) --学生编号,学生姓名, 出生年月,学生性别–2.课程表Course(c_id,c_name,t_id) – --课程编号, 课程名称, 教师编号–3.教师表Teacher(t_id,t_name) --教师编号,教师姓名–4.成绩表Score(s_id,c_id,s_score) --学生...
2019-09-14 17:28:58
646
原创 AVL树的插入删除(左右旋转)详解
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 ...
2019-08-27 11:32:05
530
原创 集合——List接口(ArrayList、LinkedList源码剖析)
list接口是一个有序的集合,其元素以线性方式存储,集合中允许存放重复的元素list接口继承collection接口public interface List<E> extends Collection<E> { }List接口下的两个实现类ArrayList,LikedList的异同电路,各有优势(应用场景):相同点:继承关系:list接口的实现类,具有l...
2019-07-29 11:03:29
142
原创 自定义一个迭代器,和使用要点
Iterator迭代器:是一种设计模式,提供了一种方法来对集合,容器进行遍历的方式,不需要关注底层数据结构和数据类型,来达到底层和上层遍历的解耦目的。集合如何获得一个迭代器:集合要具有Iterator方法需要实现iterable接口,要自定一个迭代器的内部类,类要实现Iterator接口,Iterator:从前往后遍历hasNext()判断是否有下一元素next()获取当前元...
2019-07-29 10:46:06
317
原创 集合框架简单说明
集合的基本概念:集合类和数组有许多不同之处,比如数组的长度是不可变的,而集合的长度是可变的(集合基于数组或链表,集合的数组会扩容,链变的不需要扩容),集合只能存储引用数据类型,不能存放基本数据类型:数组创建要指定大小,集合不需要。java中的集合主要有两个派生接口,即Collection和Map,其中Collection接口派生出了list集合和Set集合,各个...
2019-07-29 10:39:46
159
原创 红黑树的插入
红黑树的性质不在多说,百度都有,今天来说说红黑的插入红黑的插入分为三种情况,将其画了出来这是第一种情况:这是第二种情况第三种情况为代码里有注释enum Color{ BLACK, RED}class RBNode<T extends Comparable<T>>{//创建红黑树的节点 值域、左孩子、右孩子、父...
2019-07-13 15:27:31
128
转载 什么是红黑树(漫画解析)
转载自https://blog.csdn.net/chudelong1/article/details/82698010 ...
2019-07-07 19:52:50
126
原创 利用二叉树的前序和中序重建二叉树
/** * BST树的节点类型 * @param <T> */class BSTNode <T extends Comparable<T>>{ private T data; // 数据域 private BSTNode<T> left; // 左孩子域 private BSTNode<T> right; ...
2019-07-04 19:49:39
153
原创 判断是否是二叉树的子树
/** * BST树的节点类型 * @param <T> */class BSTNode <T extends Comparable<T>>{ private T data; // 数据域 private BSTNode<T> left; // 左孩子域 private BSTNode<T> right; ...
2019-07-04 19:47:44
234
原创 查看二叉树中序遍历倒数第K个元素
/** * BST树的节点类型 * @param <T> */class BSTNode <T extends Comparable<T>>{ private T data; // 数据域 private BSTNode<T> left; // 左孩子域 private BSTNode<T> right; ...
2019-07-04 19:45:37
621
原创 判断是否是二叉树
利用二叉树的中序遍历的递增性判断/** * BST树的节点类型 * @param <T> */class BSTNode <T extends Comparable<T>>{ private T data; // 数据域 private BSTNode<T> left; // 左孩子域 private BSTNode...
2019-07-04 19:41:11
1707
原创 二叉树返回两个节点的公共节点
/** * BST树的节点类型 * @param <T> */class BSTNode <T extends Comparable<T>>{ private T data; // 数据域 private BSTNode<T> left; // 左孩子域 private BSTNode<T> right; ...
2019-07-04 19:36:24
570
原创 二叉树的区间打印
/** * BST树的节点类型 * @param <T> */class BSTNode <T extends Comparable<T>>{ private T data; // 数据域 private BSTNode<T> left; // 左孩子域 private BSTNode<T> right; ...
2019-07-04 19:32:19
185
原创 二叉树的镜像
/** * BST树的节点类型 * @param <T> */class BSTNode <T extends Comparable<T>>{ private T data; // 数据域 private BSTNode<T> left; // 左孩子域 private BSTNode<T> right; ...
2019-07-04 19:29:10
79
原创 二叉树返回节点个数、层数,层序遍历
/** * BST树的节点类型 * @param <T> */class BSTNode <T extends Comparable<T>>{ private T data; // 数据域 private BSTNode<T> left; // 左孩子域 private BSTNode<T> right; ...
2019-07-04 19:27:06
1558
原创 二叉树的前中后序遍历(递归与非递归)
/** * BST树的节点类型 * @param <T> */ class BSTNode <T extends Comparable<T>>{ private T data; // 数据域 private BSTNode<T> left; // 左孩子域 ...
2019-07-04 19:23:50
146
原创 查找二叉树中的节点
/** * BST树的节点类型 * @param <T> */class BSTNode <T extends Comparable<T>>{ private T data; // 数据域 private BSTNode<T> left; // 左孩子域 private BSTNode<T> right; ...
2019-07-04 19:20:47
1493
原创 二叉树的删除递归与非递归
二叉树的节点的创建,请点击 class BST<T extends Comparable<T>>{ private BSTNode<T> root; // 指向根节点 /** * BST树的初始化 */ public BST() { th...
2019-07-04 19:05:38
1282
原创 二叉树节点的创建
/**BST树的节点类型@param */class BSTNode <T extends Comparable>{private T data; // 数据域private BSTNode left; // 左孩子域private BSTNode right; // 右孩子域public BSTNode(T data, BSTNode left, BSTNod...
2019-07-04 19:00:58
496
原创 java二叉树的添加 递归与非递归
//二叉树节点的创建class BSTNode <T extends Comparable<T>>{ private T data; // 数据域 private BSTNode<T> left; // 左孩子域 private BSTNode<T> right; // 右孩子域 public BSTNode(T ...
2019-07-04 18:56:57
524
原创 剑指——offer(1)二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。采用二分查找法,时间复杂度低public class Solution { public boolean Find(int target, int [][] array) { fo...
2019-06-08 20:21:02
99
原创 剑指offer——顺使针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.。思路是这样的从外圈往里圈打印,首先要计算出他的层数(需要打印几圈,是和最短边有关)写一个二维矩阵,免得测试手写 public...
2019-06-08 20:17:08
92
原创 JAVA五种IO模型
网络中获取数据的读操作步骤:同步与异步:同步与异步是针对应用程序与内核的交互而言。也就是上图的read操作,从缓存中读取数据,如果缓存中换没有准备好,如果是同步操作,它会一直等待,知道操作完成,如果是异步操作,那么他会去做别的事情,等待数据准备好,内核通知它,它再去读取数据同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。异步过程中进程触发IO操作以后,直接返回,做自己的...
2019-06-03 20:23:39
10729
3
原创 NIO+线程池
直接上代码,不多说,里面有详细解释class run implements Runnable{ private Selector selector; SocketChannel socketChannel; public run(Selector selector, SocketChannel socketChannel) { this.selector...
2019-05-31 19:34:24
895
原创 NIO详解Channel、Buffer、Selector看这一篇就够了
NIO是同步阻塞队列——>IO复用模型很像,请仔细看这幅图NIO和IO的到底有什么区别?有什么关系?1、NIO是以块的方式处理数据,但是IO是以最基础的字节流形式去写入和读出的。所以在效率上的话,肯定是NIO效率比IO的效率高出很多。2、NIO不在是和IO一样用OutputStream和InputStream输入流得到的形式来进行处理数据的,但是又是基于这种流的形式,而是采用了通道和...
2019-05-31 19:10:01
2540
原创 手动实现双向链表
** * 双向链表 * @param <T> */class dlink<T extends Comparable<T>>{//继承Comparable接口用来比较 /** * 创建结点 * @param <T> */ class Entry<T>{ T date;...
2019-05-20 21:26:16
270
原创 手动实现链式队列
public class LinkQueue<T> { /** * 定义节点类型 * @param <T> */ public static class Entry<T>{ T data; Entry<T> next ; public Entry(T da...
2019-05-20 21:19:39
135
原创 手动实现循环单链表
/** * 循环单链表 * @param <T> */class Link3<T> { // 创建节点 private static class Entry<T> { T date; Entry<T> next; public Entry(T date, Entry<T&...
2019-05-20 21:17:22
169
原创 手动实现 链式栈结构、链式队列
** * 实现一个链式栈结构 * @param <T> */class LinkStacked<T>{ /** * 链表的节点类型定义 * @param <T> */ static class Entry<T>{ T data; Entry<T> nex...
2019-05-20 21:12:22
152
原创 自己手动实现单链表的头插 、尾插、删除、逆置、倒数第K个节点、判断是否有环、求其入口点、合并有序单链表
class Link<T extends Comparable<T>> { /** * 单链表的节点类型 * @param <T> */ static class Entry<T> { T data; // 链表节点的数据域 Entry<T> next; //...
2019-05-20 21:10:06
172
原创 线程池
线程池的结构线程池:其实就是一个容纳多个线程的容器,其中的线程可以反复的使用,省去了频繁创建的线程对象的操作,无需反复创建线程而消耗 过多的资源,有时花在线程创建的和销毁的时间比真正执行的时间还要长通常我们使用线程池,都是通过Executors 工厂方法来创建一个线程池。这张图可以完美解释是线程池的工作原理:线程池的参数是什么意思比如去火车站买票,有10个售票窗口,但只有5个对外开放...
2019-05-07 18:43:19
114
原创 HashMap、HashTable、JDK1.7 ConcurrentHashMap源码分析 比较
众所周知,哈希表是非常高效,复杂度为O(1)的数据结构,在Java开发中,我们最常见到最频繁使用的就是HashMap和HashTable,但是在线程竞争激烈的并发场景中使用都不够合理。 HashMap :先说HashMap,HashMap是线程不安全的,在并发环境下,可能会形成环状链表(扩容时可能造成,具体原因自行百度google或查看源码分析),导致get操作时,cpu空转,利用率可能达到1...
2019-04-25 21:16:43
247
1
原创 创建线程的三种方式及优缺点
线程之间的执行是相互独立的,哪一个线程优先执行取决于执行取决于os的调度线程创建的方式:3种实现runnable接口、继承Thread、实现Callable接口实现Runnable接口1、创建自定义类并实现Runable接口,并实现接口中的run方法2、实例化自定的类3、将自定义类的实例作为参数Thread类,创建thread实例4、调用Thread实例的start方法,启动子线程...
2019-04-07 11:30:20
1344
原创 HashMap JDK1.7源码分析
HashMapJDK源码分析构造函数底层数据结构基本属性扩容方式默认值继承关系CRUD方式基本属性:static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16哈希表中数组默认初始值大小为16static final int MAXIMUM_CAPACITY = 1 << 30;哈希表中...
2019-03-30 00:03:10
94
原创 集合四道重要基础题
1、10万个数据随机产生的范围是0-1000,记录每个数据产生的次数2、找出第一个重复的数字3、找出重复次数最多的数据并打印4、打印全部数据,重复元素只打印一次import java.lang.reflect.Array;import java.util.*;import java.util.HashSet;public class Demo { public static...
2019-03-29 23:51:28
107
原创 HashTable详解
HashTable继承关系extends Dictionary<K,V> JDK较早提供的实现类默认值数组初始化大小:11加载因子:0.75基本属性构造函数增长方式2*table.length+1CRUDpublic synchronized V put(K key, V value) {// Make sure the value is not nullif...
2019-03-29 23:26:07
858
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人