![](https://img-blog.csdnimg.cn/20181218084428566.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java学习
文章平均质量分 82
计算机学习的心路历程
zhao_miao
冲鸭
展开
-
Java Scanner类
Java Scanner类作用: 获取控制台的输入语法:Scanner sc = new Scanner(System.in);控制台会一直等待输入,直到敲回车键;如果想要获取输入的内容,可以调用Scanner的next()或者nextLine()方法;在读取之前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据;next()方法import java.util.Scanner;public class test { public static原创 2021-01-10 18:42:02 · 310 阅读 · 0 评论 -
Java版本的堆排序(原理及代码)
堆排序原理: 堆排序指的是将大堆(小堆)堆顶(即下标为0)元素与堆的最后一个元素(下标为size)交换,将其余的元素再次调整成大堆(小堆),再次将堆顶(即下标为0)元素与堆的最后一个(下标为size-1)元素交换,将其余的元素再次调整成大堆(小堆)…………重复上述步骤,直至size = 0关于升序或者降序应该建立什么堆???若想排升序即最大值应该在最后面,根据堆排序原理,应该建大堆,这样将堆...原创 2019-05-08 16:43:08 · 319 阅读 · 0 评论 -
Lock锁详解(AQS,独占锁,可中断式获取锁,超时获取锁,理解ReentrantLock、ReentrantReadWriteLock,Condition的await、signal)
文章目录1.Lock与AbstractQueuedSynchronizer1.1 Lock简介1.2 Lock接口中的API1.3 AQS同步器AQS使用模板设计模式自己实现一个简易的Lock锁2. 独占锁2.1 独占锁的获取1.Lock与AbstractQueuedSynchronizer1.1 Lock简介锁 能够防止多个线程同时访问共享资源在Lock接口出现之前,Java程序主要是靠...原创 2019-05-07 18:27:43 · 1719 阅读 · 0 评论 -
String、StringBuffer、StringBuilder的区别?
String是不可变类,也就是说String对象一旦被创建,其值将不能被改变,而StringBuffer是可变类,当对象被创建后仍然可以对其值进行修改。由于String是不可变类,因此适合在需要被共享的场合中使用,而当一个字符串需要经常被修改时,最好使用StringBuffer来实现。如果用String来保存一个经常被修改的字符串时,在字符串修改时会比StringBuffer多很多附加的条件,...原创 2019-04-28 15:38:52 · 151 阅读 · 0 评论 -
关键字之final、finally、finalize
文章目录1.final2.finally3.finalize1.finalfinal关键字详解final用于声明属性,表示属性不可变final用于声明方法,表示方法不可覆写final用于声明类,表示类不可被继承final属性:表示属性不可变。但是不可变有两重含义:一是引用不可变;二是对象不可变那么final到底指的是哪种含义呢?public class Test{ publ...原创 2019-04-28 14:12:24 · 296 阅读 · 0 评论 -
网络版聊天室(畅聊项目)
文章目录1.关于网络编程1.1 ServerSocket1.2 Socket1.关于网络编程套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信两方的一种约定,用套接字中的相关函数来完成通信过程Socket通信先建立连接,知道目标服务器的IP地址与端口号获取本连接中的输入、输出流通过IO进行数据的读取与写入关闭流服...原创 2019-04-25 17:34:56 · 1036 阅读 · 0 评论 -
Java版本的快速排序算法(Hoare版本、挖坑法、前后下标)
快速排序的思想:c语言版快速排序import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader;import java.util.Arrays;/** * 快速排序算法的基本思想是: * * 任取待排序序列中的某个元素作为基准值,按照基准值将待排序集合分割成两个子序列 * 左子序列中的所有元素小于基准值...原创 2019-03-23 18:49:21 · 342 阅读 · 0 评论 -
Java版本的希尔排序
C语言版本的希尔排序public class ShellSort { public static void main(String[] args) { int [] arr = new int[]{3,8,5,7,6,9,4,2,1}; System.out.print("排序前:"); for(int i:arr){ ...原创 2019-04-13 20:07:31 · 289 阅读 · 0 评论 -
Java版本的归并排序
C语言版本的归并排序public class MergeSort { public static void main(String[] args) { int[] arr = new int[]{3,8,5,7,6,9,4,2,1}; System.out.print("排序前:"); for(int i:arr){ ...原创 2019-04-12 18:33:37 · 163 阅读 · 0 评论 -
Java版的冒泡排序
冒泡排序c语言版public class BubbleSort { public static void main(String[] args) { int[] arr = new int[]{3,8,5,7,6,9,4,2,1}; System.out.print("排序前:"); for(int i:arr){ ...原创 2019-04-11 19:33:31 · 394 阅读 · 0 评论 -
Java版本的插入排序
C语言版本的插入排序详解public class InsertSort { public static void main(String[] args) { int [] arr = new int[]{3,8,5,7,6,9,4,2,1}; System.out.print("排序前:"); for(int i:arr){ ...原创 2019-04-11 19:10:53 · 110 阅读 · 0 评论 -
Java版本的选择排序及选择排序的优化
选择排序及选择排序的优化C语言版public class SelectSort{ public static void main(String[] args) { int[] arr = new int[]{10,2,5,4,6,9,3,1,0}; System.out.print("排序前:"); for(int i:arr){ ...原创 2019-04-09 16:42:59 · 663 阅读 · 0 评论 -
Java类加载器ClassLoader--双亲委派模型
文章目录1.ClassLoader类加载器1.1 认识ClassLoader1.2 JDK中内置的三大类加载器1.2.1 Bootstarp-启动类加载器1.2.2 EXTClassLoader - 扩展类加载器1.2.3 APPClassLoader - 应用程序类记载器1.3 类加载器双亲委派模型1.ClassLoader类加载器Java中反射的相关操作1.1 认识ClassLoader...原创 2019-04-07 16:39:38 · 210 阅读 · 0 评论 -
【深入理解Java虚拟机】五、Java内存模型(Java内存模型的三大特性、happens-before)、volatile型变量的特殊规则(单例模式中Double check的优化)
文章目录1.Java内存模型1.1 主内存 和 工作内存1.2 内存间交互操作Java内存模型的三大特性happens-before 先行发生原则2.volatile型变量的特殊规则2.1 变量对所有线程可见2.2 禁止指令重排序2.3 单例模式中的Double check1.Java内存模型JVM定义了一种Java内存模型来 屏蔽掉各种硬件和操作系统的之间的交互,不像c++中的内存模型,不同...原创 2019-04-07 16:09:12 · 350 阅读 · 0 评论 -
Java泛型机制
文章目录1.泛型2.1 泛型类2.3 泛型方法2.3 通配符2.3.1 ? 可以接收任意类型2.3.2 ? extends 类:设置/取得泛型上限2.3.4 ?super 类 :取得泛型下限1.泛型假设我们现在需要定义一个描述坐标的类Point,需要提供两个属性x,y,对于这两个属性内容可能会有如下选择:x=10、y=20 整形x=1.2、y=2.3 浮点型x=好好学习、y=天天向上...原创 2019-04-06 14:02:52 · 279 阅读 · 0 评论 -
Java中的枚举、注解、接口定义加强、Lambda表达式、方法引用
文章目录1.枚举1.1 语法1.2 enum和Enum的区别1.3 枚举中定义其他结构1.4 枚举类的应用与总结2.注解2.1 @Override 准确覆写2.2 @Deprecated 过期声明2.3 @SuppressWarnings 压制警告1.枚举假设我们定义一个颜色类://三原色 典型的多例模式class Color{ private String title; ...原创 2019-04-05 14:10:02 · 640 阅读 · 5 评论 -
Java中的单例设计模式(饿汗式单例、懒汉式单例、单例模式中的Double Check)、多例模式
文章目录1.单例设计模式1.1 饿汗式单例1.单例设计模式单例模式是指:一个类只有一个对象比如:地球、太阳对象的产生是通过 构造方法 产生对象 客户A也可以new、客户B也可以new……我们没有办法控制会产生多少对象 。那么如何限制对象的产生数量?给构造方法加private权限private声明构造方法 ->类内部有效、类外部彻底构造不了对象单例类内部应该提供一个产生好的静态...原创 2019-04-05 08:46:31 · 365 阅读 · 0 评论 -
系统常用包、权限访问控制修饰符
文章目录1.系统常用包2.权限访问控制修饰符1.系统常用包 java.lang:系统基础类,Object、String,此包从JDK1.1之后默认导入 java.util:系统工具程序包,类集框架、List、Set、Map、Arraysjava.lang.reflect:Java反射编程包java.sql:进行数据库开发的支持包 java .io:I/O编程开发包类的全名称:包名...原创 2019-04-04 22:29:22 · 192 阅读 · 0 评论 -
包装类(数值型包装类、对象型包装类、装箱与拆箱、自动拆装箱、String类和基本数据类型的相互转换)
文章目录1.包装类1.1 数值型包装类1.2 对象型包装类1.3 装箱与拆箱1.4 自动拆装箱(语法糖)1.5 String 和 基本数据类型的相互转换1.5.1 String ->基本数据类型1.5.2 基本数据类型->String1.包装类包装类的作用是将基本类型封装到类中包装类我们也可以自己实现://将int封装到类中class IntDemo{ private...原创 2019-04-04 21:19:20 · 501 阅读 · 0 评论 -
Object类(toString()、equals())
文章目录1.Object类1.1 常用方法1.1.1 toString()方法1.1.2 equals()方法1.Object类Object类是所有类的父类,所有类默认继承Obeject类class Person{}public class Test { public static void main(String[] args) { fun(new Test())...原创 2019-04-04 20:11:26 · 358 阅读 · 0 评论 -
Collection接口中的forEach方法以及Stream流(count、filter、allMatch、anyMatch、skip、limit)、MapReduce模型
文章目录1.MapReduce基础模型2. Collection接口改进2.1 forEach2.2 Stream流2.2.1 统计操作 count2.2.2 数据过滤 filter 以及 匹配函数allMatch、anyMatch2.2.3 skip 和 limit1.MapReduce基础模型Map:处理数据Reduce:分析数据假设我们现在要处理一个1TB的数据文件,每行一个整数...原创 2019-04-02 11:39:59 · 2704 阅读 · 2 评论 -
集合输出Iterator、ListIterator、Enumeration、foreach
文章目录1.迭代输出 Iterator1.1 Iterator使用1.2 删除元素2.双向迭代输出接口3.for-each循环4. Enumeration从标准来讲,集合输出有四种手段:Iterator、ListIterator、Enumeration、foreach1.迭代输出 Iterator//1.判断是否有下一个元素boolean hasNext();//2.取得当前元素E n...原创 2019-04-01 18:53:53 · 310 阅读 · 4 评论 -
Collections工具类(翻转reverse,addAll、乱序shuff、集合填充fill、集合排序sort、将集合变为不可变集合unmodifiableList)
文章目录1.Collections工具类1.1 集合翻转reverse1.2 将所有指定的元素添加到指定的集合中 addAll1.3 集合乱序 shuffle1.4 集合填充 fill1.5 集合编程线程安全的集合1.6 集合排序 sort1.7 将集合变为不可变集合 unmodifiableList1.Collections工具类1.1 集合翻转reverseimport java.uti...原创 2019-04-01 16:45:37 · 576 阅读 · 0 评论 -
Java中的栈、队列、Propertise属性文件操作
文章目录1.Stack栈1.1 常用方法2.队列2.1 常用方法3.Propertise属性文件操作3.1 常用方法3.2 IO支持的方法1.Stack栈栈的特性:先进后出1.1 常用方法//入栈public E push(E item) //出栈public synchronized E pop() //返回栈顶元素public synchronized E peek() /...原创 2019-04-01 15:31:58 · 308 阅读 · 0 评论 -
Java中的反射(Class类对象的三种实例化方法、反射与工厂模型、反射取得父类 父接口信息、反射调用类中构造方法、反射调用类中普通方法、动态设置封装)
文章目录1. 认识反射1.1 Class类对象的三种实例化方式1.2 通过反射实例化对象1.3 反射与工厂设计模式2. 反射与类2.1 反射取得父类、父接口信息2.1.1 取得类的包名称2.1.2 取得父类的Class对象2.1.3 取得实现的父接口2.2 反射调用类中构造方法2.2.1 取得类中指定参数的构造方法2.2.2 取得类中所有的构造方法2.2.3 Class类中的newInstance...原创 2019-03-30 21:48:48 · 620 阅读 · 0 评论 -
【深入理解Java虚拟机】四、垃圾收集器(Serial、ParNew、Parallel Scavenge、CMS、Serial Old、Parallel Old、G1)
文章目录1. 垃圾收集器1. 垃圾收集器HotPot虚拟机,这个JVM包含的收集器如下图上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连接,就说明他们之间可以搭配使用,所处的区域,表示它是属于新生代收集器还是老年代收集器...原创 2019-03-23 15:49:03 · 4525 阅读 · 0 评论 -
【深入理解Java虚拟机】三、垃圾回收算法(标记-清除算法、复制算法(新生代算法)、标记-整理算法(老年代回收算法)、分代收集算法、Minor GC、Major GC与Full GC的区别?
文章目录1. 垃圾回收算法1.1 标记-清除法1.2 复制算法(新生代算法)1. 垃圾回收算法1.1 标记-清除法"标记-清除"算法是最基础的收集算法。算法分为"标记"和"清除"两个阶段标记出所有需要回收的对象(遍历堆标记)标记完成后统一回收所有被标记的对象(遍历堆删除)"标记-清除"算法的不足之处:效率问题:标记 和 清除这两个过程效率都不高。空间问题:标记和清除后会产生大...原创 2019-03-22 18:25:25 · 1328 阅读 · 1 评论 -
【深入理解Java虚拟机】二、垃圾回收器 如何判断对象已"死''-引用计数法、可达性分析法详解
文章目录1.垃圾回收器1.1 如何判断对象已“死”1.1.1 引用计数法1.1.2 可达性分析算法1.2 回收方法区1.垃圾回收器对于程序计数器、虚拟机栈、本地方法栈这三部分区域而言,其生命周期与相关线程有关,随线程而生,随线程而灭,这三个区域的内存分配与回收具有确定性,当方法结束或者线程结束时,内存就自然而然跟着回收了。所以我们谈的垃圾回收关注的是Java堆和方法区这两个区域1.1 如何...原创 2019-03-21 20:11:48 · 376 阅读 · 0 评论 -
【深入理解java虚拟机】一、Java内存区域的划分与各个区域可能存在的异常
文章目录1.Java内存区域的划分与内存溢出1.1 程序计数器1.2 Java虚拟机栈1.3 本地方法栈1.4 Java堆1.5 方法区1.6 运行时的常量池1.7 内存区域分布图1.Java内存区域的划分与内存溢出 JVM会在执行Java程序的过程中把它管理的内存划分为若干个不同的数据区域、这些区域各司其职,各有各的创建与销毁时间、有的区域随着JVM的启动而存在,有的区域则依赖用户线程的启...原创 2019-03-21 16:39:19 · 372 阅读 · 1 评论 -
Java中类集中的HashSet、TreeSet
文章目录1.Set接口1.1 HashSet类1.2 TreeSet类1.3 TreeSet排序1.3.1 实现Comparable接口1.3.2 构造方法传入比较器接口实现类的对象1.3.3 排序总结1.4 重复元素判断1.Set接口 Set接口与List接口最大的区别就是Set不允许存放重复元素,Set接口并没有对Collection接口进行扩充,而List对Collection进行了扩...原创 2019-03-16 17:26:37 · 242 阅读 · 0 评论 -
Java中的HashMap的基本操作以及源码分析、Hashtable的基本操作以及源码分析、ConcurrentHashMap略解
文章目录1.Map集合1.1 Map集合的描述、常用方法1.2 HashMap子类1.2.1 HashMap的基本操作1.2.2 HashMap的源码分析1.2.3 HashMap的性能问题1.3 Hashtable子类1.3.1 Hashtable的基本操作1.3.2 Hashtable的源码分析1.3.3 Hashtable的性能问题1.4 ConcurrentHashMap略解1.Map集...原创 2019-03-16 12:43:10 · 343 阅读 · 0 评论 -
Java类集中的ArrayList、Vector、LinkedList、以及三者的区别、fail-safe(安全失败)与fail-fast(快速失败)的区别
文章目录1.Collection接口2.List接口2.1 ArrayList子类1.Collection接口Collection接口的操作形式与链表的操作形式类似,每一次进行数据操作的时候只能够对单个对象进行处理。Collection是单个集合保存的最大父接口。但是在实际开发中我们很少会直接使用Collection接口,往往会考虑使用Collection接口的子接口:List(允许数据重复)...原创 2019-03-15 16:17:40 · 541 阅读 · 0 评论 -
Java中的序列化与反序列化
文章目录1.序列化与反序列化1.1 序列化的概念1.2 反序列化的概念1.3 序列化与发序列化的实现1.4 序列化与反序列化的实现1.4.1 对象的序列化输出1.4.2 对象的反序列化输入1.序列化与反序列化1.1 序列化的概念把内存中的对象转换为字节序列的过程1.2 反序列化的概念把字节序列恢复为内存中的对象的过程1.3 序列化与发序列化的实现Java中类若要被序列化输出,该类必须...原创 2019-03-13 17:36:53 · 165 阅读 · 0 评论 -
Java中的打印流PrintStream、输入流Scanner、装饰设计模式
文章目录1.打印流1.1 打印流的概念1.打印流1.1 打印流的概念打印流设计的主要目的是为了解决OutputStream的设计缺陷,属于OutputStream功能的加强版。如果操作的不是二进制数据,只是想通过程序向终端目标输出信息的话,OutputStream不是很方便,因为所有的数据必须转换为字节数组。如果要输出的是int、double等类型就更加不便于输出...原创 2019-03-10 21:44:18 · 423 阅读 · 0 评论 -
Java中的File类与IO流(File类的基本使用、字节流、字符流、转换流、java文件拷贝)
文章目录1. File类的基本使用1.1 文件操作1.1.1 创建新文件1.1.2 删除文件1.1.3 路径分隔符1.2 目录操作1.2.1 取得父路径与父File对象1.2.2 创建目录1.3 取得文件或者目录的信息(大小、最后修改日期)2. IO流2.1 流的操作过程2.2 字节流2.2.1 字节的输出流OutputStream2.2.1.1 输出方法2.2.2 字节的输入流InputStre...原创 2019-03-09 22:09:09 · 3615 阅读 · 1 评论 -
Java线程池详解(为什么要有线程池、线程池的继承关系、线程池的底层原理、手工创建线程池、JDK内置的4大线程池)
文章目录1.为什么有线程池的出现?2. 线程池的继承关系3. 线程池的底层原理4.线程池的创建与使用4.1 手工创建线程池4.2 向线程池提交任务4.2.1 execute()方法4.2.2 submit()方法5.JDK内置的4大线程池5.1 普通调度池5.1.1 无大小限制的线程池5.1.2 固定大小的线程池5.1.3 单线线程5.2 定时调度池5.2.1 Executors.new...原创 2019-03-02 12:42:42 · 2850 阅读 · 0 评论 -
java语言实现生产者与消费者模型
文章目录1. wait()与notify()方法1.1 wait()方法1.2 wait(long time)1.3 notify()1.4 notifyAll()2. 生产者消费者模型2.1 一个生产者一个消费者2.1 多个生产者多个消费者1. wait()与notify()方法1.1 wait()方法wait()方法又叫痴汉方法,就是使线程停止运行,会释放对象锁wait()方法调用该...原创 2019-02-22 23:54:09 · 1093 阅读 · 0 评论 -
CAS操作、Java对象头、偏向锁的获取与撤销、轻量级锁的获取与撤销、锁粗化、锁消除
文章目录1 synchronized的优化1.1 CAS操作1.1.1 CAS带来的ABA问题1.1.2 自旋会浪费大量的处理器资源1.1.3 公平性1.2 Java对象头1.2.1 偏向锁1.2.1 偏向锁的获取1.2.1 偏向锁的撤销1.2.3 偏向锁的获得和撤销流程1 synchronized的优化 在JDK 1.5中,synchronized的性能是很低的,因为这是一个重量级的操作,...原创 2019-02-18 14:49:01 · 5739 阅读 · 15 评论 -
synchronized处理同步问题、synchronized的底层实现
文章目录线程的同步1.1 同步问题的引出1.2 synchronized处理同步问题1.2.1 同步代码块1.2.2 同步方法1.3 synchronized锁类对象1.3.1 锁住同一个对象1.3.2 锁住这个类对应的Class对象1.3.3 static synchronized方法1.4 synchronized实现原理1.4.1 对象锁(monitor)机制1.5 synchroniz...原创 2018-11-25 17:11:58 · 452 阅读 · 0 评论 -
Java中多线程的常用操作方法(线程命名与取得、线程休眠、线程让步、等待线程终止、线程停止、线程优先级、守护线程)
文章目录多线程的常用操作方法3.1 线程命名与取得多线程的常用操作方法3.1 线程命名与取得 多线程的运行状态是不确定的,所以对于多线程操作必须有一个东西明确标识出线程对象的信息,这个信息往往通过名称来描述。在Thread类中提供有如下的线程名称方法:No方法名称类型描述1public Thread(Runnable target ,String name)构...原创 2018-11-17 12:14:27 · 717 阅读 · 0 评论