Java学习
qichangjian
菜鸟的学习之路(博客仅用于基础整理,方便查看)
展开
-
list,set,map和array的最全总结(2)
List,set,map实现类的对比以及适用场景原创 2017-08-16 12:05:26 · 532 阅读 · 0 评论 -
Java希尔排序
简介希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现。基本思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多...原创 2019-02-19 11:08:09 · 623 阅读 · 0 评论 -
Java计数排序
计数排序的基本思想就是:加入输入一个数x,如果我们可以找到比x小的数有几个,那么就可以直接将x放入到对应的输出数组的位置。比如输入一个数x=12,发现在输入的数据中,比12小的有4个,那么毫无疑问12就该排在第五位。废话不多说,代码中有详细的思路讲解:import java.util.Arrays;/** * 计数排序2 * 中间数组 通过数组下标来表示原始数组的值,来统计每个元素出...原创 2019-02-19 11:20:05 · 3580 阅读 · 0 评论 -
Java快排算法
思路对于给定的数组,从中选一个元素为比较对象,一般选最左或最右的元素,选左边为升序排,选右边反之。数组array[]:最左边:target = 5数组下标:i = 0, j = 9步骤:①从右边遍历数组,把array[ j ]比5小的放在5的左边, j–;交换位置后i = 0,j = 7:②从左边遍历数组,把array[ i ]比5大的放在5的右边, i++;交换位置后i =...原创 2019-02-19 11:28:31 · 1249 阅读 · 0 评论 -
Java归并排序
归并排序原理归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。网上找到的两张图片: 归并排序代码:import java.util.Arrays;/** * 归并排...原创 2019-02-19 11:34:35 · 3226 阅读 · 2 评论 -
Java堆排序
概念储备堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆堆是一棵顺序存储的完全二叉树。每个结点的值都**大于**或等于其左右孩子结点的值,称为大顶堆(小根堆);每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆(大根堆)。如下图:二叉树的种类(了解):满...原创 2019-02-19 12:11:57 · 4666 阅读 · 1 评论 -
Java线程的三种实现方法,以及死锁
实现线程的三种方式1.实现runable2.继承Thread3.重写callable接口重写call方法 1.5后,返回一个参数线程和进程:进程: 占用计算机一定的cpu ,内存 ,带宽等资源的一个应用如(.exe ,qq) 一个操作系统包括多个进程线程: qq是一个进程,会占用一定的资源 qq同时和多个人进行聊天的时候,是相互独立的,这就是多线程 一个进程包...原创 2019-02-19 17:45:43 · 840 阅读 · 0 评论 -
TCP协议与UDP协议
概念理解首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信!TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。TCP/IP协议集包括应用层,传输层,网络层,网络访问层。其中...原创 2019-02-19 19:30:54 · 14788 阅读 · 1 评论 -
String、StringBuffer、StringBuidler区别?
java中 String、StringBuffer、StringBuidler 有什么区别?1、String是字符串常量, StringBuffer、StringBuilder是字符串变量2、StringBuffer线程安全(方法用了synchronized修饰)、StringBuilder线程不安全3、底层都是char[],String用了final 修饰,后二者初始容量是16+字符串的长...原创 2019-02-20 19:17:51 · 287 阅读 · 0 评论 -
Java中 compareable 内部比较器和comparator 外部比较器
Java中比较器比较简单,我们就不过多的讲解,直接上代码来对比compareable 内部比较器和comparator 外部比较器。内部比较器实现:import lombok.AllArgsConstructor;import lombok.Data;/**泛型代表比较的对象 同种类型的对象才具有比较能力 内部比较器:Comparable<Student>实现coma...原创 2019-01-29 10:50:19 · 904 阅读 · 0 评论 -
在什么情况下Java比C++快?
1、根据我的经验,当你把优化过的C++代码转换成Java代码,代码的速度会慢大约三倍。2、根据我的经验,把Java代码转换成C++的代码,速度同样也会慢三倍。首先,这种比较根本没有意义,除非你能意识到用Java的方式去写Java代码,而不是像C++开发者那样去组织C++代码。3、对于并发的数据结构使用Java往往更有效率。当数据结构不是并发使用时,JVM会消除内存屏障和同步,并倾向使用基于运行...原创 2019-03-04 11:28:04 · 1141 阅读 · 0 评论 -
交换机和路由器区别
交换机路由器简单理解以快递为例:首先我们要把我们传输的数据就比拟成收发的快递货物。然后我们要知道的是,我们手中的手机和电脑等一些使用设备,它们都有一个固定的MAC地址,这个MAC地址就相当于快递系统中的接收人,也就是你,就相当于快递最终要送达到你的手中是一样的,不论你是在家里还是在单位,哪怕是你搬家了,快递都会按照地址来把货物送到你手中。而给你送到手中货物的快递员就是交换机,他负责把数据发送...原创 2019-03-04 13:02:34 · 7977 阅读 · 1 评论 -
并发编程关键字ThreadLocal、Volatile、Synchronized、Atomic
1.Atomic*(原子性)什么是原子性?不可分割的操作。一个操作要么成功 ,要么失败 , 这个操作就是原子性的操作。属于原子性操作的:赋值操作 int i=5;//原子性的操作 int b=i;数学运算非原子性的操作的i++ i=i+1 i+1 进行加 i=i+1 进行复制操作i-- 非原子性的操作对于原子操作类,Java...原创 2019-03-04 15:56:45 · 226 阅读 · 0 评论 -
Lock接口获取锁的四个方法lock,tryLock,lockInterruptibly实例
Lock和synchronized的比较?Lock提供了比synchronized更多的功能。但是要注意以下几点:1)Lock不是Java语言内置的,synchronized是Java语言的关键字,因此是内置特性。Lock是一个类,通过这个类可以实现同步访问;2)Lock和synchronized有一点非常大的不同,采用synchronized不需要用户去手动释放锁,当synchronize...原创 2019-03-04 16:20:59 · 3169 阅读 · 1 评论 -
jvm类加载机制
jvm类加载机制加载、验证、准备、解析、初始化。一、类加载机制中的第一步加载。在这个阶段,JVM主要完成三件事:1、通过一个类的全限定名(包名与类名)来获取定义此类的二进制字节流(Class文件)。2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。3、在内存中生成一个代表这个类的java.lang.Class对象,二、类的连接类的加载过程后生成了类的java.lan...原创 2019-03-11 11:40:13 · 150 阅读 · 0 评论 -
几个常用IO流
字节流:InputStream、FileInputStream、BufferedInputStreamOutputStream、FileOutputStream、BufferedOutputStream字符流:FileReader、BufferedReader、InputStreamReaderFileWriter、PrintWriter、OutputStreamWriter...原创 2019-03-11 11:55:03 · 341 阅读 · 0 评论 -
如何实现线程间的数据安全?
如何实现线程间的数据安全?线程安全在三个方面体现1.原子性 2.可见性 3.有序性1.原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作Java中提供了很多atomic类,AtomicInteger,AtomicLong,AtomicBoolean等 。2.可见性:一个线程对主内存的修改可以及时的被其他线程看到对于可见性,JVM提供了synchronized和volatile....原创 2019-03-11 12:03:15 · 394 阅读 · 0 评论 -
利用 druid 的 sql parser 模块解析 sql 语句获得表名
druid 是阿里开源在 github 上面的数据库连接池,里面有一个专门解析 sql 语句的模块。源码位置SQL Parser 模块的介绍相关 APIdruid 使用说明:druid 现在已经直接发布到了 maven 仓库中,可以直接引用。1、新建一个 maven 工程并命名2、在 pom.xml 文件中加入如下配置,当前最新使用 1.0.19<dependency>...原创 2019-04-09 15:35:08 · 11992 阅读 · 4 评论 -
Java插入排序
插入排序解析与实现代码:/** * 插入排序 * 算法分析: * 插入排序最好的情况是序列已经是升序排列了,在这种情况下,需要进行 N-1 次比较即可,时间复杂度为 O(N), * 最坏的情况是序列降序排列,这时候时间复杂度为 O(N^2)。因此插入排序不适合对于数据量比较大的排序应用。 * 但是如果需要排序的数据量很小(如小于千),那么插入排序还是一个不...原创 2019-02-19 10:50:22 · 836 阅读 · 0 评论 -
Java选择排序
选择排序解析与代码实现/** * 选择排序: * 算法分析: * 选择排序最好和最坏的情况一样运行了 O(N^2) 时间,但是选择排序无疑更快,因为它进行的交换少得多, * 当 N 值较小时,特别是如果交换时间比比较时间大得多时,选择排序实际上是相当快的。 * 平均复杂度也是 O(N^2)。 * 算法是不稳定的,假设 a=b,且 a 在 b 前面,而某轮...原创 2019-02-19 10:48:49 · 1074 阅读 · 1 评论 -
Java冒泡排序
冒泡排序实现与优化代码:/** * 冒泡排序: * 算法分析: * 冒泡排序最好的情况是初始状态是正序的,一次扫描即可完成排序,所以最好的时间复杂度为 O(N); * 最坏的情况是反序的,此时最坏的时间复杂度为 O(N^2)。 * 平均情况,每轮 N/2 次循环,N 轮时间复杂度为 O(N^2)。 * 算法是稳定的,因为当 a=b 时,由于只有大于才做交...原创 2019-02-19 10:46:18 · 1173 阅读 · 0 评论 -
list,set,map和array的最全总结(1)
有很多人对集合框架不是很清楚明了,今天,我来谈一谈对四种集合框架的理解。 以及他们的关系。原创 2017-08-16 11:59:36 · 420 阅读 · 0 评论 -
面向过程和面向对象
面向对象和面向过程 什么是面向对象?什么又是面向过程呢?翻译 2017-08-15 20:28:27 · 810 阅读 · 1 评论 -
SSM整合实现增删改查
详细讲解一些怎样整合spring,springMVC和mybaties.第一步:数据库文件-------------------------创建数据库--创建用户(以管理员身份登录数据库,创建新用户)create user handson identified by 274039;--为用户分配权限grant create session,resource,dba to handson;--创原创 2017-08-28 09:43:56 · 1486 阅读 · 1 评论 -
无xml的springmvc实现登陆功能
分享以下没有xml配置文件的springmvc,并实现登陆功能。原创 2017-08-28 12:02:40 · 456 阅读 · 0 评论 -
Java反射代码以及讲解
类的声明周期:1.加载: 把 .class 加载 到 方法区的内存中, 并且 创建 一个 对应的对象 在 堆中(Class);2.连接 1)验证: 对字节码文件 .class进行验证。 2)准备 对静态变量 分配空间 ,进行默认初始化; 3)把 符号引用 替换 为 直接引用;。3.初始化对静态 变量 声明处 或者 静态块处初始化。反射: ...原创 2019-01-26 21:33:37 · 323 阅读 · 0 评论 -
java中三种移位运算符
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >> 1,相当于num除以2 >>> : 无符号右移,忽略符号位,空位都以0补齐/** * 移位运算符测试 * java中有三种移位运算符...原创 2019-01-29 10:06:16 · 145 阅读 · 0 评论 -
集合中list,set,map底层实现,扩容机制以及优缺点讲解
目录1.集合分类2.具体讲解&nbsp;&nbsp;2.1 List集合&nbsp;&nbsp;&nbsp;&nbsp;2.1.1 arrayList详细讲解&nbsp;&nbsp;&nbsp;&nbsp;2.1.2 LinkedList详细讲解&nbsp;&nbsp;&nbsp;&原创 2019-02-18 14:24:06 · 5835 阅读 · 6 评论 -
Java中比较器的实现方法
Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。通常对象之间的比较可以从两个方面去看:第一个方面:对象的地址是否一样,也就是是否引用自同一个对象。这种方式可以直接使用“==“来完成。第二个方面:以对象的某一个属性的角度去比较。对于JDK8而言,有三种实现对象比较的方法:1、覆写Object类的equals()方法;2、内部比较器:继承Comparable接口...原创 2019-02-18 16:16:30 · 723 阅读 · 0 评论 -
Java中==和equals比较解析
一、java当中的数据类型和“==”的含义:基本数据类型(也称原始数据类型):byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(==),比较的是他们的值引用数据类型:当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)。注: 对于第二种类型,除非是同一个new出来的对象,他们的比较...原创 2019-02-18 17:18:28 · 244 阅读 · 0 评论 -
Java的内存模型
一、Java程序的执行过程:这里写图片描述Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的J...原创 2019-02-18 18:18:00 · 128 阅读 · 0 评论 -
Java中异常
要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常...原创 2019-02-18 19:06:06 · 156 阅读 · 0 评论 -
23种设计模式
作为一个程序猿,对设计模式的了解是必不可少的,下面分享几个我学习设计模式时常看的博客:非常全的23种设计模式菜鸟教程设计模式讲解其中带有代码实例GitHub例子...原创 2019-02-18 19:51:31 · 252 阅读 · 0 评论 -
Java中final、finally与finalize的区别
1. final在java中,final可以用来修饰类,方法和变量(成员变量或局部变量)。下面将对其详细介绍。1.1 修饰类当用final修饰类的时,表明该类不能被其他类所继承。当我们需要让一个类永远不被继承,此时就可以用final修饰,但要注意:final类中所有的成员方法都会隐式的定义为final方法。1.2 修饰方法使用final方法的原因主要有两个:(1) 把方法锁定,以防...原创 2019-02-18 21:14:35 · 156 阅读 · 1 评论 -
判断两个链表是否相交并找出交点,判断一个链表是否有环
链表的分类链表主要分为三类:单向链表只能从表头到表尾的顺序,每个节点中保存了指向下一个节点的指针;双向链表则可以反向遍历,因为节点中既保存了向后节点的指针,又保存了向前节点的指针。循环链表指的是在单向链表和双向链表的基础上,将两种链表的最后一个结点指向第一个结点从而实现循环。判断两个链表是否相交并找出交点问题描述:一个比较经典的问题,判断两个链表是否相交,如果相交找出他们的交点。解...原创 2019-02-28 12:33:38 · 1583 阅读 · 0 评论 -
什么是线程池?线程池的种类以及创建方式
1、什么是线程池:线程池的概念大家应该都很清楚,帮我们重复管理线程,避免创建大量的线程增加开销。线程池就是提前创建若干个线程,如果有任务需要处理,线程池里的线程就会处理任务,处理完之后线程并不会被销毁,而是等待下一个任务。由于创建和销毁线程都是消耗系统资源的,所以当你想要频繁的创建和销毁线程的时候就可以考虑使用线程池来提升系统的性能。java.util.concurrent.Executor...原创 2019-02-28 12:55:09 · 1477 阅读 · 0 评论 -
Cookie和Session是什么?它们的区别是什么?
什么是Cookie?Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。信息保存的时间可以根据需要设置...原创 2019-02-28 13:09:46 · 37484 阅读 · 8 评论 -
Java二分查找法
二分查找递归实现与循环实现代码:/** * 二分查找 * 1.二分查找又称折半查找,它是一种效率较高的查找方法。 * 2.二分查找要求:(1)必须采用顺序存储结构 (2).必须按关键字大小有序排列 * 3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后 * 将要查找的值和数组的中值进行比较,若小于中值则在中值前 面找,若大于中值则在中值后面找,...原创 2019-02-19 10:44:10 · 8671 阅读 · 1 评论 -
java给定起始时间段和所需日期号获取符合条件日期集合
需求:每个月可能跑批,要求给定开始时间和结束时间以及每月多少号进行跑批,在该时间段内找到符合条件的日期,如果是29,30,31这几天个别月份可能没有,可以赋值为当月最后一天。代码实现package com.qcj;import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;import java.t...原创 2019-06-22 19:37:09 · 923 阅读 · 0 评论