![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 90
zhao_miao
冲鸭
展开
-
Java多线程复习
文章目录1. 进程与线程的区别 ?2.线程的创建方式3. 线程池工作原理?4.JDK内置的四大线程池 ?1. 进程与线程的区别 ?进程: 操作系统中程序的一次执行周期(比如登录QQ到退出QQ就伴随着一个进程的创建与销毁)是资源分配的最小单位线程:线程是进程的一个子任务,是任务分配的最小单位区别:创建一个进程的开销比创建一个线程的开销大得多进程之间通信比线程之间通信复杂的多2.线程...原创 2019-08-08 17:01:46 · 331 阅读 · 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 · 2642 阅读 · 2 评论 -
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 · 176 阅读 · 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 · 264 阅读 · 0 评论 -
集合输出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 · 274 阅读 · 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 · 503 阅读 · 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 · 279 阅读 · 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 · 267 阅读 · 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 · 511 阅读 · 5 评论 -
Java中的单例设计模式(饿汗式单例、懒汉式单例、单例模式中的Double Check)、多例模式
文章目录1.单例设计模式1.1 饿汗式单例1.单例设计模式单例模式是指:一个类只有一个对象比如:地球、太阳对象的产生是通过 构造方法 产生对象 客户A也可以new、客户B也可以new……我们没有办法控制会产生多少对象 。那么如何限制对象的产生数量?给构造方法加private权限private声明构造方法 ->类内部有效、类外部彻底构造不了对象单例类内部应该提供一个产生好的静态...原创 2019-04-05 08:46:31 · 330 阅读 · 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 · 186 阅读 · 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 · 428 阅读 · 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 · 312 阅读 · 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 · 513 阅读 · 0 评论 -
Java版本的快速排序算法(Hoare版本、挖坑法、前后下标)
快速排序的思想:c语言版快速排序import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader;import java.util.Arrays;/** * 快速排序算法的基本思想是: * * 任取待排序序列中的某个元素作为基准值,按照基准值将待排序集合分割成两个子序列 * 左子序列中的所有元素小于基准值...原创 2019-03-23 18:49:21 · 335 阅读 · 0 评论 -
【深入理解Java虚拟机】四、垃圾收集器(Serial、ParNew、Parallel Scavenge、CMS、Serial Old、Parallel Old、G1)
文章目录1. 垃圾收集器1. 垃圾收集器HotPot虚拟机,这个JVM包含的收集器如下图上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连接,就说明他们之间可以搭配使用,所处的区域,表示它是属于新生代收集器还是老年代收集器...原创 2019-03-23 15:49:03 · 4264 阅读 · 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 · 105 阅读 · 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 · 376 阅读 · 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 · 160 阅读 · 0 评论 -
二叉搜索树、AVL树、红黑树、B树、B+树
二叉搜索树概念二叉搜索树又称二叉排序树规则:若它的左子树不为空,则左子树上的所有节点的值都小于根节点的值若它的右子树不为空,则右子树上的所有节点的值都大于根节点的值它的左右子树也是二叉搜索树插入插入是根据二叉搜索树的特性,左边的子树都比根小右边的子树都比根大删除综上所述,删除规则为:左为空,父亲指向我的右右为空,父亲指向我的左左右均不为空,替换法删除...原创 2019-08-05 17:02:16 · 559 阅读 · 0 评论 -
二叉树的前序遍历、中序遍历、后序遍历(递归、非递归)
文章目录1.前序遍历1.1 递归1.2 非递归2.中序遍历2.1 递归2.2 非递归3.后序遍历3.1 递归3.2 非递归1.前序遍历前序遍历的规则:访问根节点前序遍历左子树前序遍历右子树LeetCode144 二叉树的前序遍历1.1 递归class Solution { public List<Integer> preorderTraversal(Tre...原创 2019-08-05 15:49:44 · 198 阅读 · 0 评论 -
【异常】运行时异常和普通异常有什么区别?
Java提供了两种错误的异常类,分别为Error和Exception,且它们拥有共同的父类ThrowableError表示在运行期间出现了很严重的错误,并且该错误是不可恢复的,由于这属于JVM层次的严重错误,因此这种错误是会导致程序终止执行的。此外,编译器不会检查Error是否被处理,因此在程序中不推荐去捕获Error类型的异常,主要原因是运行时异常多是由于逻辑错误导致的,属于应该解决的问题,也...原创 2019-06-04 18:15:28 · 2781 阅读 · 0 评论 -
【线程】什么是守护线程?
Java提供了两种线程:守护线程和用户线程守护线程,是指程序运行时在后台提供的一种通用服务的线程,这种线程并不属于程序中不可或缺的部分。通俗点讲,任何一个守护线程都是整个JVM中所有非守护线程的"保姆"。用户线程和守护线程几乎一样,唯一的不通过之处在于如果用户线程已经全部退出运行,只剩下守护线程存在了,JVM也就退出了。因为当所有非守护线程结束时,没有了被守护者,守护线程也就没有工作可做,当然...原创 2019-05-29 08:33:50 · 3492 阅读 · 0 评论 -
Java运算符的优先级
运算符优先级的问题经常会导致程序出现很多不容易发现的问题我又记不住这些关系,所以今天把它整理出来优先级运算符1. () []2+(正) -(负) ++ – ~ !3* / %4+(加) -(减)5<< >>(无符号右移) >>>(有符号右移)6< ...原创 2019-06-05 21:01:42 · 6855 阅读 · 2 评论 -
【线程】sleep()方法和await()方法有什么区别?sleep()和yield()方法有什么区别?
sleep()是使线程暂停执行一段时间的方法。await()也是一种使线程暂停执行的方法。当线程交互时,如果线程对一个同步对象x发出wait()调用请求,那么该线程会暂停执行,被调对象进入等待状态,直到被唤醒或者等待超时。具体来说sleep()方法和await()方法的区别主要表现在以下几个方面?原理不同sleep()方法是Thread类的静态方法,是线程用来控制自身流程的,它会使线程...原创 2019-05-28 16:02:39 · 3121 阅读 · 1 评论 -
【GC】垃圾回收过程
在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交由JVM来处理。垃圾回收顾明思义,就是释放垃圾占用的空间,那么问题来了,在Java中,什么样的对象会被认定为"垃圾"?当一些对象被认定为垃圾之后,怎么样回收呢?一、如何确定某个对象是垃圾?第一种方法是引用计数法 给对象增加一个引用计数器,每当有一个地方引用它时,计数器就加1;当引用失效时,计数器就减1,任何时刻计数器为...原创 2019-05-30 22:24:06 · 3812 阅读 · 0 评论 -
【线程】run()方法与start()方法有什么区别?
run()方法与start()方法有什么区别? 通常,系统通过调用线程类的start()方法来启动一个线程、此时该线程处于就绪状态,等待调度,即就是这个线程可以被JVM来调度执行。在调度过程中,JVM底层通过调用线程类的run()方法来完成实际的操作,当run()方法结束后,此线程就会终止。 如果直接调用线程类的run()方法,此时run()方法仅仅被当做一个普通的函数调用,程序中仍然只有...原创 2019-05-28 09:50:56 · 2417 阅读 · 1 评论 -
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 · 1706 阅读 · 0 评论 -
网络版聊天室(畅聊项目)
文章目录1.关于网络编程1.1 ServerSocket1.2 Socket1.关于网络编程套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信两方的一种约定,用套接字中的相关函数来完成通信过程Socket通信先建立连接,知道目标服务器的IP地址与端口号获取本连接中的输入、输出流通过IO进行数据的读取与写入关闭流服...原创 2019-04-25 17:34:56 · 1025 阅读 · 0 评论 -
Java版本的堆排序(原理及代码)
堆排序原理: 堆排序指的是将大堆(小堆)堆顶(即下标为0)元素与堆的最后一个元素(下标为size)交换,将其余的元素再次调整成大堆(小堆),再次将堆顶(即下标为0)元素与堆的最后一个(下标为size-1)元素交换,将其余的元素再次调整成大堆(小堆)…………重复上述步骤,直至size = 0关于升序或者降序应该建立什么堆???若想排升序即最大值应该在最后面,根据堆排序原理,应该建大堆,这样将堆...原创 2019-05-08 16:43:08 · 312 阅读 · 0 评论 -
String、StringBuffer、StringBuilder的区别?
String是不可变类,也就是说String对象一旦被创建,其值将不能被改变,而StringBuffer是可变类,当对象被创建后仍然可以对其值进行修改。由于String是不可变类,因此适合在需要被共享的场合中使用,而当一个字符串需要经常被修改时,最好使用StringBuffer来实现。如果用String来保存一个经常被修改的字符串时,在字符串修改时会比StringBuffer多很多附加的条件,...原创 2019-04-28 15:38:52 · 145 阅读 · 0 评论 -
关键字之final、finally、finalize
文章目录1.final2.finally3.finalize1.finalfinal关键字详解final用于声明属性,表示属性不可变final用于声明方法,表示方法不可覆写final用于声明类,表示类不可被继承final属性:表示属性不可变。但是不可变有两重含义:一是引用不可变;二是对象不可变那么final到底指的是哪种含义呢?public class Test{ publ...原创 2019-04-28 14:12:24 · 247 阅读 · 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 · 281 阅读 · 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 · 651 阅读 · 0 评论 -
【深入理解Java虚拟机】三、垃圾回收算法(标记-清除算法、复制算法(新生代算法)、标记-整理算法(老年代回收算法)、分代收集算法、Minor GC、Major GC与Full GC的区别?
文章目录1. 垃圾回收算法1.1 标记-清除法1.2 复制算法(新生代算法)1. 垃圾回收算法1.1 标记-清除法"标记-清除"算法是最基础的收集算法。算法分为"标记"和"清除"两个阶段标记出所有需要回收的对象(遍历堆标记)标记完成后统一回收所有被标记的对象(遍历堆删除)"标记-清除"算法的不足之处:效率问题:标记 和 清除这两个过程效率都不高。空间问题:标记和清除后会产生大...原创 2019-03-22 18:25:25 · 1316 阅读 · 1 评论 -
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 · 160 阅读 · 0 评论 -
Java中接口的定义与使用(接口的基本概念、接口的限制、接口的应用)
文章目录1 接口1.1 接口的基本概念3.2 接口的限制3.2.1 接口中只允许public权限3.2.2 实现接口&amp;amp;继承抽象类1 接口 抽象类与普通类相比最大的特点是约定了子类的实现要求,但是抽象类存在单继承局限。如果要约定子类的实现要求并避免单继承局限就需要使用接口。 在以后的开发中:接口优先(在一个操作即可以使用抽象类又可以使用接口的时候优先考虑使用接口)1.1 接口的基...原创 2018-11-06 18:16:18 · 1527 阅读 · 0 评论 -
Java中StringBuffer类(StringBuffer类与String类的相互转换 、字符串反转、在字符串中插入,删除数据 、String、StringBuffer、StringBuilde)
文章目录1 StringBuffer类1.1 StringBuffer的使用1.1.1 append()的使用1.1.2 String变为StringBuffer1.1.3 StringBuffer变为String1.2 字符串反转1.3 删除指定范围的数据1.4 插入数据2 String、StringBuffer、StringBuilder的区别1 StringBuffer类 java中...原创 2018-10-31 21:17:08 · 1140 阅读 · 0 评论 -
Java中关于String类的基本操作(字符与字符串的相互转换、字节与字符串的相互转换、字符串比较、字符串查找、字符串替换、字符串拆分、字符串截取、去掉左右空格、转大小写、判断是否为空)
文章目录1 字符与字符串的相互转换1.1 将字符数组转为字符串1.2 将字符串转为字符数组1.3 将字符串转为单个字符1.4 判断一个字符串是否由数字组成?2 字节与字符串的相互转换2.1 将字节数组转为字符串2.2 将字符串转为字节数组3 字符串比较3.1 不区分大小相等比较3.2 比较两个字符串的大小4 字符串查找4.1 判断字符串在源字符串中是否存在4.2 判断字符串是否以指定的字符串开始4...原创 2018-10-31 19:17:32 · 1897 阅读 · 1 评论 -
Java中的String类
文章目录String类1.1 String类的两种实例化1.1.1 直接赋值1.1.2 通过构造方法实例化1.2 字符串相等比较1.2.1 基本数据类型的比较1.2.1 字符串比较1.3 字符串常量是String类的匿名对象1.4 String类两种实例化的区别1.4.1 采用直接赋值1.4.2 采用构造方法1.5 字符串常量不可变更String类完整类名:java.long.String1...原创 2018-10-29 17:38:28 · 365 阅读 · 2 评论