![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 67
you_never_alone
这个作者很懒,什么都没留下…
展开
-
排序算法——堆排序
最近对排序算法仔细研究之后,发现对于堆排的理解不够深刻,所以研究一段时候后,特来总结一下。堆排原理堆排序见名知意就是在堆中就行排序,利用堆的特性来排序,所以我们就先要知道,堆是什么?堆最直观的理解是完全二叉树(这里要区别和满二叉树的区别),这里要区别于平衡二叉树,堆只要求子节点小于或大于父节点(这里大小根据需求是大根堆还是小根堆决定),对左右节点大小没有要求(堆的特点)。现在我们对堆有...原创 2019-08-29 12:03:02 · 207 阅读 · 0 评论 -
java集合--LinkedList
LinkedList 1.概念 LinkedList: 实现一个链表。由这个类定义的链表也可以像栈或队列一样被使用。 定义类: public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cl...原创 2018-07-22 22:34:33 · 185 阅读 · 0 评论 -
java集合--ArrayList
ArrayList底层实现:ArrayList底层用数组来实现,与正常的数组相比,它能动态扩容。ArrayList继承了AbstractList,实现了List,RandomAccess,Cloneable,java.io.Serializable等接口public class ArrayList<E> extends AbstractList<E> ...原创 2018-07-22 22:15:21 · 129 阅读 · 0 评论 -
java集合框架开篇
这就是我们Java中重要的集合模块。可以看到主要是由Colletion,Map和Iterator接口组成。Itreator主要是由ListIterator接口组成。Iterator主要是用来遍历集合元素的,我们称为迭代器,图中看到Collection类依赖Itreator,是因为Collection类中都实现了Iterator函数,并且返回一个Iterator对象。Collect...原创 2018-07-22 11:37:13 · 144 阅读 · 0 评论 -
泛型的简单介绍以应用
1,泛型的定义泛型也成为“参数化类型”,我们可以理解为在定义的时候由具体的类型参数化,类似与函数的变量参数,调用时传入具体的参数来调用。泛型的本质是为了参数化类型,也就是在不创建新的类型情况下,通过泛型指定不同的类型的形参具体控制限制的类型。2,泛型的引出在学习栈的时候我们常用的是int类型定义的栈,只能存放整数类型,但实际中我们需要将各种类型的数据放入栈中,所以我们想到了通用栈class Obj...原创 2018-06-01 16:05:20 · 245 阅读 · 0 评论 -
面向对象的特征
面向对象的特征:继承 封装 多态继承:代码的复用1.派生类继承了基类的除了 基类的构造函数的其他数据成员class Base{ public int ma; public Base(int a){ this.ma = a; } public void show(){ System.out.println("Is show"); }}class Base1 extends Ba...原创 2018-05-23 12:30:54 · 147 阅读 · 0 评论 -
java中的快速排序
我们先来举列子了解一下快速排序:如图,我们以队伍第一个元素为基准,然后我们从后面找比基准大的值后,将他的值放到基准的位置(注意 原位置还是他的值)一次后:第二次:第三次:第四次:最后一次:当两边的指标重合时,将基准放的那个位置,然后一次快速排序结束,结束后的结果是,基准左侧,全是比他小的,基准右侧全是比他大的。而递归就是一次快速排序后,两边递归子序列快排,函数实现:public static in...原创 2018-05-16 16:43:07 · 16131 阅读 · 0 评论 -
java中的类加载器
先了解一下类中的加载器加载的时候从底向上查询,在从上往下尝试加载。类加载器的加载机制,首先类加载器接收到类后不会直接加载,而会先把它委托给自己的父类加载器完成,每一个加载器都是这样,所以现象就是从底向上的查询,所以最终都会传送到顶层的启动类加载器,除非父类无法加载时,反馈给子类,子类才会尝试加载。如有错误,请多多指教。...原创 2018-05-27 17:33:27 · 151 阅读 · 0 评论 -
java中的反射
java中每一个class都有一个class对象,而当我们编写一个类,编写完成后,再生产的class文件中,就会产生一个class对象。class对象包含这class中的基本信息。简单的表示就是对于class类有几点是要注意的:1.class类不能人为生成,必须由系统产生。2,每个类只能有一个class对象。获取class类的方法:1.通过对象名getClass();class Student1{...原创 2018-05-27 17:01:24 · 144 阅读 · 0 评论 -
java中的String,StringBuilder,和StringBuffer的联系与区别
首先我们看这么一个程序public static void main(String[]args){ String str1 = "hello"; String str2 = str1+"word"; System.out.println(str2);}String就是简单的将str1与word相加赋给了str2,我们汇编了解一下可以看到在内部String类型new出来的是StringBu...原创 2018-05-27 16:08:52 · 415 阅读 · 0 评论 -
java中的shell排序
shell排序是基于插入排序而产生的一种排序方式,插入排序我们知道他的时间复杂度是基于原来的数组序列有无序而决定的,如果原数组有序,他的时间复杂度是O(n),但如果无序,他的时间复杂度是O(n^2),为了优化,于是我们的shell排序就是来优化这一情况。shell排序就是,列如15个元素,我们可以以n个为一组分组,然后n个元素有序后再合并,如n = 3相同颜色的为一组,然后进行排序,结果为然后 n...原创 2018-05-16 15:47:39 · 269 阅读 · 0 评论 -
java集合--HashMap
1.概念基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。另外,HashMap是非线程安全的,也就是说在多线程的环境下,可能会存在问题,而Hashtable是线程安全的。public cl...原创 2018-07-22 23:03:41 · 122 阅读 · 0 评论 -
java集合--Has和Map和HashTable的区别
HashTable:先来了解了解HashTable,和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射。Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。此外,...原创 2018-07-22 23:44:05 · 307 阅读 · 0 评论 -
java集合--HashSet
HashSet:1.基本概念 它继承AbstractSet,实现了Set接口,Cloneable,java.io.Serializable HashSet是一个没有重复元素的集合 它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用null public class HashSet<E> extends AbstractSet&...原创 2018-07-22 23:48:01 · 103 阅读 · 0 评论 -
排序算法之-快速排序(递归和非递归)
哭唧唧原创 2019-08-27 10:56:21 · 918 阅读 · 0 评论 -
编程--两数之和
问题是:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。解法一:可以暴力破解,两个for循环遍历,第一个for循环用来控制第一个数,第二个循环来寻找第二个数,这就不多做介绍。这个方法很容易理解,但是时间复杂度是O(n^2)空间复杂度O(1),...原创 2019-07-01 12:41:45 · 1182 阅读 · 0 评论 -
Mybatis中撞见的小错误
记录一下今天用mybatis调用方法时,发生了一个错误Error instantiating class MyBatisss.bean.user with invalid types () or values (). Cause: java.lang.NoSuchMethodException: MyBatisss.bean.user.<init>(),代码一切正常,但无论注解,还是通...原创 2019-06-20 20:38:49 · 164 阅读 · 0 评论 -
线程中简单的方法
start()和run()Start()方法:使线程开始执行,java虚拟机中调用该线程的run()方法。run()方法:如果该线程是使用独立的Runnable()运行对象构造的,则执行Runnable对象的run方法;否则什么都不执行,值得一提的是,一般我们继承的Thread类已经实现了Runnable接口。 运行的结果 main...运行...Thread-0......原创 2018-09-21 18:10:11 · 137 阅读 · 0 评论 -
synchronized与volatile的联系与区别
synchronized先来了解synchronized,首先我们知道互斥同步是一种常见的高并发保障手段。同步是指多个线程并发的访问数据时,保证共享数据在同一时刻只能被一个线程访问,而互斥是同步的实现手段之一。而被synchronized修饰的代码或代码块,在同一时刻只能被一个线程访问。在java中同步锁是依赖对象存在的。不同线程对于同步锁是互斥的(例如 一个线程拿到对象的同步锁,那么...原创 2018-09-19 18:02:52 · 204 阅读 · 0 评论 -
线程状态及其转换
线程基本状态转换 创建状态也叫新建(new):线程被创建后就进入了新建状态,Thread thraed = new Thread();就绪状态(Runnable):线程被创建后,调用start()方法,从而来启动该线程。运行(Running):线程获得cpu的执行权限。阻塞状态(Blocked):阻塞状态是运行的线程因为某种原因退出了cpu的使用权,暂停运行。阻塞的线程必须转入...原创 2018-09-19 16:49:38 · 178 阅读 · 0 评论 -
线程的三种创建方式
概念要了解线程,就要先知道进程的概念。进程:进程是程序的一次执行过程,是在系统中能独立运行并作为资源分配的基本单位,是由一组机器指令,数据和堆栈等组成的,是一个能独立运行的活动实体。这里注意的是程序和进程的区别:1,进程是一个动态概念,程序是一个静态概念。2,进程具有并发性,程序没有。3,进程是资源分配和处理机调度的独立单位,其并发性受系统的制约。4,一个程序,多次执行...原创 2018-09-19 13:24:44 · 185 阅读 · 0 评论 -
婚姻匹配
题目:建立一个模型,来模拟推导社会男女择偶过程。 为了模型简化,一个人的特性指标有三个,这里假设为财富、样貌、品格,每个指标均可取值1-100之间任意数字。同样也对这3项指标有自己的需求。这3个需求值取值范围都在1-98间,当然三者的和必须为100.所以任意一个人可以用以下数组来表述: G(A、B、C、A1、B1、C1)G代表男,M代表女。 举例G11(80、50、40、10、30、60),表示男...原创 2018-08-05 23:39:50 · 2190 阅读 · 0 评论 -
java集合--PriorityQueue
PriorityQueue:1,成员属性public class PriorityQueue<E> extends AbstractQueue<E> implements java.io.Serializable { private static final long serialVersionUID = -7720805057305804111...原创 2018-07-22 23:51:59 · 186 阅读 · 0 评论 -
接口小例题
模拟银行存取款1,创建基接口BankAccount,包含存款方法playIn(), 取款方法withdraw(),查询余额方法getBalance()。2,创建接口ITransferBankAccount(继承基接口BankAccount)包含转账方法transferTo().类中包含 私有数据成员:名字name和余额balance, 取款方法:withdraw()查询余额getBanlan...原创 2018-05-25 15:59:03 · 303 阅读 · 0 评论 -
java中的接口
接口在java中是种抽象类型,主要是对行为进行抽象,用interface声明,一般用类来继承接口,进而继承实现接口中的抽象方法。interface A{ public static final int age = 10; public abstract void fun1();//不能有具体的实现}interface B{ int b =100; void fun2();}两个接口,...原创 2018-05-25 15:48:44 · 137 阅读 · 0 评论 -
java中的链式队列
所谓链式队列就是用节点存储队列,对于队列的特点我们就不过多介绍,不过值得注意的是,链队不需要预先分配内存,也不会出现队满。如果我们以链头为队头的话:出队的时间复杂度为O(1),但入队的复杂度却是O(n)同样如果以链头为队尾的话:出队的时间复杂度为O(n),但入队的时间复杂度是O(1)为了是出队与入队的时间复杂度都为O(1)我们分别在链头链尾做两个标志节点,然后采用尾插的方法初始化队列class l...原创 2018-05-11 10:25:18 · 613 阅读 · 0 评论 -
java中的顺序表及其简单的应用
我们先简单介绍一下顺序表,顺序表就是在单链表的基础上对它自身已经使用的空间加以标注,如我顺序表的长度是10,已经使用的长度是5,那么我们这里就会有一个变量来存储,这就是顺序表。接下来我们说一下顺序表的特点:1,逻辑上和物理上都相邻 顺序表采用数组存储,因此存储单元不仅会在逻辑上相邻在物理上也是相邻的。2,预先分配内存 因为采用数组存储,所以数组的长度要在初始化是分配好3,便于随机存取 ...原创 2018-05-03 22:46:54 · 443 阅读 · 0 评论 -
链式栈和循环队列
上次我们讲到的栈采用的是用数组的格式,而链式栈是采用和链表一样的节点存储,和栈的存储方式一致,不过不需要预先分配内存,也没有栈满这种情况class listStack{ class Entry{ int data; Entry next; public Entry(){//无参构造 this.data = -1; this.next = null; } publi...原创 2018-05-08 22:43:25 · 219 阅读 · 0 评论 -
一维数组中的四种拷贝
这节我们来说数组中四种拷贝方式1.for循环拷贝2.clone拷贝3.System.arraycopy拷贝4.Arrays.copyof拷贝这里我们先建立个浅拷贝的概念:简单来说就是拷贝后两个变量指向同一片地址。数组属于引用类型,自身携带的是储存值得地址。接下来让我们从基本类型的数组和引用类型的数组来分别讲述数组属于引用类型1.for循环这是输出的结果这里定义通过for循环把array拷贝给arr...原创 2018-04-12 21:54:17 · 9918 阅读 · 1 评论 -
java中的四种内部类
这节我们来说一下java中的内部类,首先我们知道java中有四种常见的四种内部类,分别是:1,静态内部类2,实例内部类3,本地内部类4,匿名内部类今天让我们一起走进它们1,静态内部类定义静态内部类初始化内部类对象,并打印内部类打印结果。那这里就难免会遇到一个问题,在内部类中能否调用外部类的变量?不难看出被static修饰的可以直接打印,而没有被修饰的不行,必须要用被外部类定义的out来引用。2,实...原创 2018-04-22 17:09:12 · 484 阅读 · 0 评论 -
简单了解java中的类与对象
程序是实体在计算机中的体现,而每个人实体都有相应的属性和方法(也可以理解为功能)比如人就是一个实体,年龄、身高、性别是这个实体的属性,而这个实体也具有他的功能,比如睡觉、吃饭、跑步就是他的方法。而在程序中类用来描述实体的抽象概念,具有这些抽象概念的对象都属于这个类,也就是说类是一群具有某种相同特性对象的集合。总结的说类是实体的抽象,对象是真正的实体。下面我们举个例子说明这里我们以人为实体,抽象出具...原创 2018-04-22 00:17:53 · 185 阅读 · 0 评论 -
java中三种常见的排序方式
这节我们来了解一下java中常见的三种排序方式,这里我们说的是1.冒泡排序2.选择排序3.插入排序排序中要考虑到的主要因素是时间复杂度和空间复杂度,时间我们可以用System.currentTimeMillis()这个来查看。下面我们依次来说明1.冒泡排序所谓冒泡排序就是从前到后遍历选出最大值放到最后一个,然后在遍历剩下的找出剩下中最大的放到倒数第二个,依次直至遍历到最后一个,也就是最小的放到第一...原创 2018-04-17 13:24:01 · 22850 阅读 · 0 评论 -
java运算符中的小秘密
如图是java中常见的运算符,运算符中优先级越小优先级越高,那让我们一起去挖掘一下它们的小秘密1、[]第一句是声明一个数组。第二句是属性获取,获取数组中对应下标中的内容。 我们可以尝试打印一下第一句需要注意一下,其中[的意思是数组类型,I表示的数组里面装的是int类型,剩下的表示数组对应的地址。2、 ..运算符虽然个头很小,但是功能却不小,一般用来调用方法图中调用的是length方法3、()(...原创 2018-04-03 22:35:44 · 224 阅读 · 0 评论 -
二维数组中的四种拷贝
如同一维数组一样,二维数组中也有四种拷贝方式,且与一维数组中的拷贝方式一样分别为:1.for循环拷贝2.clone3.System.arraycopy4.Arrays.copyOf四种用法在上节都已经讲过,那让我们看看在二维数组中与在一维数组中会有什么不同。1.for循环拷贝输出结果可以看出改变array[0][0]的值array2[0][0]的值并不发生改变,原因是array2拷贝只是让arra...原创 2018-04-15 17:24:46 · 12675 阅读 · 2 评论 -
java中++深度解析
在上节我们提到了java中的运算符++,这节中我们继续深究它。还是上节课中的例子答案是10;原因我们知道是产生的出一个临时量,假设是tmp,运算步骤是这样的tmp = i;i++;j=tmp。那他在内部到底是怎么运行的,为什么是上述步骤那 ?我们用反汇编来试一下0:bipush 10把常量放入操作数栈中,此时栈里面只有10一个元素2:istore_1把操作数栈顶元素的10,存储到...原创 2018-04-09 23:55:07 · 2387 阅读 · 0 评论 -
java中的优先队列
在生活中,我们常会遇到这样的问题,排队过程中女士优先,游戏中会员比普通用户的优先级也要高,这就有了我们的优先队列。优先队列的简单说就是在普通队列中加入标志,比如我们用数字 0 1 2 3来表示,数字小的对应节点的优先级就高,我们就将他放在合适的位置。如图新节点的标志等级是3,我们要把他插入到1后面,进而使得整个队列优先合适初始化class prioLink{ class Entry{ in...原创 2018-05-11 10:39:28 · 2961 阅读 · 0 评论 -
两个队列实现一个栈
这里我们采用作图来说明例如,有两个队,我们用先用p1来装元素,要入栈,就继续入p1中,如果要出队就要把p1中的元素除了最后一个全部转到p2中然后p1.pop,于是有有人会问如果还要输出怎么办,这里有两步1,首先判断p1是否为空,如果为空,就把p2中的除最后一个转到p1中,然后p2.pop2.如果p1不为空,那么就把如第一步吧p1中的元素除最后一个元素入队到p2中,然后p1.pop例如,就先把p1中...原创 2018-05-11 10:54:46 · 138 阅读 · 0 评论 -
java中的单链表
今天开始来讲一下java中的数据结构之~单链表,数据结构就是数据在内存中存储的结构,而单链表就是最简单的数据结果之一。今后我们学到的栈,队列都是需要在它的上拓展。先简单介绍一下单链表的一个基本类型我们称之为字节,一般字节中存储两类东西,一种是需要携带的数据,另一种是下一个字节的地址。如图 上一个字节存储下一个字节的地址,而下一个有储存下下一个,继而形成一条链表,方向只能从上一个指向下一个,单向指向...原创 2018-04-27 14:52:45 · 682 阅读 · 0 评论 -
java的抽象类和密封类
抽象类就是被abstract修饰的类,而抽象类可以拥有自己的抽象方法abstract class Animal{//抽象类 abstract public void cry();//抽象方法 不做具体实现 只能用public 或者 protected修饰 //不加修饰默认public public void fun1(){//抽象类中...原创 2018-05-25 14:29:27 · 1315 阅读 · 0 评论 -
java基数排序的思想
基数排序是通过数字的特征不断放入对应的“桶”中,最终实现有序。举例说明:有十个桶,然后有这些数字,要将他们排序:首先根据个位放入与桶数相同的桶中然后从第一桶中依次取出相应的数字(从桶底取出):然后根据十位继续装入桶中:再依次从桶底取出:在按百位装入相应的桶中:最后按顺序取出:等到按最高位排完序后,该序列有序:...原创 2018-05-20 17:22:12 · 211 阅读 · 0 评论