javaSE
javase部分知识
Jamie Chyi
清风
展开
-
Java8中stream流处理数据21个小案例(学习使用)
案例19:重量大于20的分为一组,重量小于20的分为一组,只要分组的重量最大的。案例14:按颜色分组,挑选出每个分组中重量最大的,重量一样的话,根据城市名字。案例16:按照颜色分组,找出每个分组下的最大值,总数。案例20:按照重量大于20的一组,小于20的一组,找出每组个数。案例2:筛选要么是重量大于23的红苹果,要么是绿苹果的集合。案例17:重量大于20的分为一组,重量小于20的分为一组。案例15:同时找出苹果的总数量,最大值,最小值,平均值。案例12:按照苹果颜色分组,颜色一样按照重量分组。原创 2023-02-02 17:09:44 · 638 阅读 · 0 评论 -
数组、集合、链表实现学生成绩管理系统
数组、集合、链表实现学生成绩管理系统(JavaSe)数组实现:功能描述:学号为唯一识别符,不可重复,可进行增加、修改、删除、查看操作、升序输出。学生类:package com.lili.StudentManagerSystem.smsChar;/** * 学生实体类 * * @author: QiJingJing * @create: 2021/7/19 */public class Student { /** * 学号 */ private lo原创 2021-07-19 15:50:07 · 357 阅读 · 0 评论 -
观察者模式
观察者模式1.观察者模式原理观察者模式定义:简单地说,观察者定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象,这样一个主题对象在状态的变化就能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新。2.观察者模式实现:具体被观察者接口:package com.lili.observer;/** * 被观察者接口 * * @author: QiJingJing * @create: 2021/7/18 */public interface M原创 2021-07-18 15:02:42 · 139 阅读 · 0 评论 -
GSON的用法(处理对象和JSON的相互转化)
GSON的用法(处理对象和JSON的相互转化):Gson是Google自己写的一个Java对象与JSON相互转化的工具包,首先我们需要下载jar包,这里可用idea直接下载,下载步骤如下;点击项目结构点击+号:点击maven:然后搜索jar包关键字gson:下载到项目的指定位置编写一个JSON文件[ { "id": 9223232323, "text": "How do I read a JSON stream in Java", "geo": null,原创 2021-07-18 11:15:30 · 6049 阅读 · 6 评论 -
DOM、JDOM、DOM4J解析XML
DOM、JDOM、DOM4J解析XMLJAVA解析XML通常有两种方式,DOM和SAX(SAX前面已经示范)DOM:Document Object Model(文档对象模型)DOM的特性:定义一组JAVA接口,基于对象,与语言和平台无关将XML文档表示为树,在内存中解析和存储XML文档,允许随机访问文档的不同部分DOM解析XMLDOM的优点,由于树在内存中是持久的,因此可以修改后更新,它还可以在任何时候在树中上下导航,API使用起来也比较简单。解析步骤:DocumentBuilderFact原创 2021-07-17 15:18:21 · 812 阅读 · 6 评论 -
SAX解析XML
SAX解析XML1.XML(Extensible Markup Language 可扩展标记语言),XML是一个以文本来描述数据的文档。XML文档示例:<?xml version="1.0" encoding="UTF-8" ?><people> <person personId="E01"> <name>Tony Blair</name> <address>10 Downing Stre原创 2021-07-17 10:00:10 · 1445 阅读 · 2 评论 -
java注解
注解的相关概念1.认识AnnotationJDK1.5开始,java增加了对元数据(即类的组成单元数据)的支持,也就是(Annotation)注解,它是代码里做的特殊标记,这些标记可以在编译,类加载,运行时在不改变原有逻辑的情况下,被读取,并执行相应的处理,通过使用Annotation,程序员可以在源文件中嵌入一些补充的信息,代码分析工具。开发工具和部署工具可以通过这些补充信息进行验证或者进行部署,Annotation类似于修饰符一样被使用,可以用于包,类,构造器方法,方法,成员变量,参数,局部变量的声原创 2021-07-16 16:57:01 · 351 阅读 · 0 评论 -
java枚举类
枚举枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则编译器就会报错,枚举可以让编译器在编译时就可以控制源程序给的非法制,使用普通变量的方式在开发阶段无法实现这一目标在jdk1.5之后,使用关键字enum定义一种新的类型,称为枚举类型package com.lili.Enum;/** * 枚举类 * * @author: QiJingJing * @create: 2021/7/16 */public class Test1 { public static voi原创 2021-07-16 14:18:14 · 205 阅读 · 0 评论 -
java动态代理
动态代理所谓动态代理,即通过代理类:Proxy的代理,接口和实现类之间可以不直接发生联系,而可以在运行期间(Runtime)实现动态关联java动态代理主要是使用java.lang.reflect包中的两个类InvocationHandler类public Object invoke (Object obj,Method method,Object[] obs)其中第一个参数obj值的是代理类,method是被代理的方法,obs是指被代理的方法的参数,此方法由代理类来实现。Proxy类prot原创 2021-07-15 17:00:20 · 142 阅读 · 0 评论 -
java中的反射
反射JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。可以通过Class类取得类信息,通过Class类调用属性或方法反射给开发者提供了可根据类信息动态生成对象并执行对象行为的一系列操作,这个特性让编写更加灵活的底层框架时尤为重要package com.lili.reflect;import org.junit.Test;import j原创 2021-07-15 16:11:33 · 135 阅读 · 0 评论 -
多线程的相关概念及简单实战
多线程的相关概念1.线程的两种实现方式继承Thread类,实现Runnable接口package com.lili.thread;import sun.awt.windows.ThemeReader;/** * 线程的休眠 * 在当前线程的执行中,暂停指定的毫秒数 释放cpu的时间片 * * @author: QiJingJing * @create: 2021/7/14 */public class Test1 { public static void main(Str原创 2021-07-15 13:31:32 · 186 阅读 · 0 评论 -
队列与栈(Queue,Deque,Stack)
队列与栈(Queue,Deque,Stack)队列(Queue)是一种特殊的线性表,是一种先进先出的数据结构,它只允许在表的前端进行删除操作,在表的后端进行插入操作,进行插入操作的端称为队尾,进行删除操作的端称为队头,队列中没有元素时,称为空队列Deque:一个线性的collecton,支持在两端插入和移除元素。此接口既支持有容量限制的双端队列,也支持没有固定大小的双端队列,接口定义在双端队列两端访问元素的方法,提供插入、移除、删除和检查元素的方法Stack类代表先进后出的堆栈package com原创 2021-07-14 08:29:30 · 279 阅读 · 0 评论 -
Optional容器类
Optional容器类of :为非null的值创建一个OptionalofNullable:为指定的值创建一个Optional,如果指定的值为null,则返回一个空的OptionalisPresent:如果值存在就返回true,否则就返回falseget:如果Optional有值则将其返回,否则抛出NosSuchElementExceptionifPresent:如果Optional实例有值则为其调用consumer,否则不做处理ofElse:如果有值将其返回,否则返回指定的其他值orElse原创 2021-07-14 07:54:17 · 147 阅读 · 0 评论 -
Collections工具类
Collections工具类1.排序操作(主要针对list接口提供)reverse(List list): 反转指定集合元素的顺序shuffle(List,list): 对List里的元素进行随机排序sort(List list): 对list中的元素根据自然升序排序sort(List list,Comparator c): 自定义排序规则swap(List list,int i,int j):将指定List集合中i处元素和j处元素进行交换rotate(List list,int distan原创 2021-07-13 16:58:59 · 114 阅读 · 0 评论 -
Map新特性
# Map新特性在JDK8中Map接口提供了一些新的遍历的方法,因为在本文中所有Map方法都是以默认值方法的方式实现的,所以现有的Map接口的实现可以直接拥有这些在默认值方法中定义的默认行为,而不需要新增一行代码getOrDefault(Object,V)putIfAbsent(k,v)replace(k,v)replace(k,v,v)compute(K key,BiFunction<? super K,? super V,? extends V>remappingFunction原创 2021-07-13 15:55:05 · 233 阅读 · 0 评论 -
HashMap,TreeMap,Hashtable,LinkedHashMap的区别
HashMap,TreeMap,Hashtable,LinkedHashMape的区别/** * HashMap的实现原理 * 1.基于哈希表(数组+链表+二叉树(红黑树)) * 2.默认加载因子为0.75,默认数组大小是16 * 3.把对象存储到哈希表中,如何存储? * 把key对象通过hash()方法计算hash的值,然后用这个hash值对数组长度取余数(默认是16),来决定对key对象在数组中存储的位置,当这个位置有多个对象时,以链表结构存储,JDK1.8后,当链表长度大于8时,链表转换为原创 2021-07-12 17:36:55 · 273 阅读 · 0 评论 -
HashMap的实现原理
HashMap的实现原理基于哈希表(数组+链表+二叉树(红黑树))默认的加载因子为0.75,默认数组大小为16把对象存储到哈希表中,如何存储?把key通过hash()方法计算hash的值,然后用这个hash值对数组长度(默认是16),来决定对key对象再数组中存储的位置,当这个位置有多个对象时,以链表结构存储,JDK1.8后,当链表长度大于8时,链表转换为红黑树结构存储,这样的目的是为了取值更快,存储的数据量越大,性能的表现越明显。扩充原理当数组的容量超过75%时,数组需要进行扩原创 2021-07-12 15:58:55 · 163 阅读 · 0 评论 -
java8 Stream接口简单使用
java8 Stream接口简单使用什么是stream?Stream是元素得集合,这点让Stream看起来类似Iterator;可以支持顺序和并行的对原Stream进行汇聚的操作我们可以把Stream当成一个高级版本的Iterator,原始版本的Iterator,用户只能一个一个的遍历元素并对其执行某些操作;高级版本的Stream,用户只要给出需要对其包含的元素执行什么操作,比如“过滤大于10的数字”,“获取所有数字的和”等,具体这些操作如何应用到每个元素上,就给Stream就好了!具体代码小例子:原创 2021-07-12 11:00:08 · 221 阅读 · 0 评论 -
四大核心函数式接口
jdk1.8的四大核心函数式接口函数式接口参数类型返回值类型描述ConsumerT无处理一个接受T类型的值FunctionTR处理T类型的值,并返回R类型的值Supplier无T接受一个T类型的值PredicateTboolean处理T类型的值,返回true或者false每个接口小案例:package com.lili.java8;import java.util.ArrayList;import java.util.List原创 2021-07-11 15:54:44 · 263 阅读 · 0 评论 -
iterator接口
集合框架的iterator接口1.集合输出很是情况下,我们都要把集合的内容进行输出,也就是遍历集合遍历集合的方式有以下几种:IteratorListIterator(可用于list集合)Enumeration(可用于遍历vector集合)foreach其中foreach和iterator使用率最高例:package com.lili.collection;import java.util.*;/** * 集合的迭代 * * @author: QiJingJi原创 2021-07-11 13:59:58 · 131 阅读 · 0 评论 -
HashSet、TreeSet、LinkedHashSet的区别
HashSet判断重复值的原理/** * HashSet * 1.实现方式:基于哈希表(HashMap)实现 * 2.不允许重复,可以有一个null元素 * 3.不保证顺序恒久不变 * 4.添加元素时把元素作为HashMap的key存储,HashMap的value使用一个固定的Object对象 * 5.排除重复元素是通过equals来判断元素是否相同 * 6.判断两个对象是否相同,先判断两个对象的hashCode是否相同(如果两个对象的hashcode相同,不一定是同一个对象,如果不同,那一原创 2021-07-11 10:34:52 · 361 阅读 · 0 评论 -
ArrayList、Vector、LinkList的区别
ArrayList与Vector的区别?/** * ArrayList(1.8) * 1.实现原理,采用动态对象数组实现,默认构造方法创建了一个空数组 * 2.第一次添加元素,扩展容量为10,之后的扩充算法:原来的数组大小+原来数组的一半 * 3.不适合进行删除或插入操作 * 4.为了防止数组动态扩充次数过多,建议创建ArrayList时,给定初始容量 * 5.多线程使用不安全,适合在单线程访问时使用,效率较高 * JDK1.2开始 *//** * vector * 1.实现原理:原创 2021-07-11 09:02:28 · 220 阅读 · 0 评论 -
Path接口与Files工具类
Path接口与Files工具类1.path接口Path表示的是一个目录名序列,其后还可以跟着一个文件名,路径中的第一个部件是跟部件时就是绝对路径。否则就是相对路径2.Files工具类读写文件:static path write(Path path,byte[] bytes,OpenOption…options)写入文件static byte[] readAllBytes(Path path) 读取文件中的所有字节复制、剪切,删除static path copy(Path source,Path原创 2021-07-10 10:01:50 · 466 阅读 · 0 评论 -
NIO的基本概念和缓冲区
NIO缓冲区:在NIO库中,所有的数据都是用缓冲区处理的,在读取数据时,它是直接读到缓冲区的,在写入数据时,它是写入到缓冲区的,任何时候访问NIO中的数据,你都是将它放到缓冲区中。缓冲区实质上是一个数组,通常它是一个字节数组,但是也可以使用其他种类的数组,但是一个缓冲区不仅仅是一个数组,缓冲区提供了对数据的结构化访问,而且还可以跟踪系统的读写进程缓冲区类型:最常用的缓冲区类型是ByteBuffer。一个ByteBuffer可以在其底层字节数组上进行get/set操作(即字节的获取和设置)。Byte原创 2021-07-10 08:29:32 · 247 阅读 · 0 评论 -
装饰者模式
装饰者模式意图:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰者模式相比生成子类更为灵活,该模式以对客服端透明的方式扩展对象的功能适用环境:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。package com.lili.decorator;/** * 装饰者模式 * * @author: QiJingJing * @create: 2021/7/9 */public class Test1 { public static void main(Stri原创 2021-07-09 23:02:29 · 119 阅读 · 0 评论 -
Properties文件操作
Properties文件操作properties,主要用于读取java配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,这样做也是为了方便用户,用用户能够脱离程序本身去修改相关的变量设置。它提供了几个主要的方法:1.getProperty(String key)用指定的键在此属性列表中搜索属性,也就是通过参数key,得到key所对应的value,2.setProperty(String key, String value)调用HashTable的方法put。他通过基类的pu原创 2021-07-09 16:08:35 · 486 阅读 · 0 评论 -
查找单词个数案列实现(字符串流)
利用字符串流实现查找单词个数package com.lili.file;import java.io.IOException;import java.io.StreamTokenizer;import java.io.StringReader;/** * 字符串流 * 用字符串流计算单词个数 * * @author: QiJingJing * @create: 2021/7/9 */public class Test12 { private static void str原创 2021-07-09 15:09:45 · 124 阅读 · 0 评论 -
字节数组流和数据流
字节数组流和数据流字节数组流ByteArrayInputStream包含一个内部缓冲区,该缓冲区包含从流中读取的字节,内部计数器跟踪read方法要提供的下一个字节,关闭ByteArrayInputStream无效,此类中的方法在关闭流后仍可以使用,而不会产生任何IOExceptionByteArrayOutputStream此类实现了一个输出流,其中的数据被写入一个byte数组,缓冲区会随着数据的不断写入而自动增长,可使用toByteArray()和toString()获取数据,关闭ByteArr原创 2021-07-09 14:15:17 · 682 阅读 · 0 评论 -
对象流的序列化和反序列化
对象流的序列化和反序列化对象流的两个类:ObjectOutputStream 将java对象的基本数据类型写入OutputStreamObjectInputStream 对以前使用ObjectOutputStream写入的基本数据和对象进行反序列化package com.lili.file;import java.io.*;import java.util.Arrays;/** * 对象流 * 对象序列化:将对象写入文件,实际写入的是类名,属性名,属性的值等 * 反序列化 * *原创 2021-07-09 10:37:33 · 187 阅读 · 0 评论 -
缓冲流与打印流(字节与字符)
缓冲流首先要明确一个概念:对文件或其他目标频繁的读写操作,效率低,性能差使用缓冲流的好处是,能够更高效的读写信息,原理是将数据先缓冲起来,然后一起写入或读取出来。BufferedInputStream: 为另一个输入流添加一些功能,在创建BufferedInputStream时,会创建一个内部缓冲区数组,用于缓冲数据。BufferedOutputStream,通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。BufferedReader:从字符输入原创 2021-07-09 09:28:21 · 344 阅读 · 0 评论 -
Io转换流
Io转换流转换流OutputStreamWriter:可以将字节输出流转换为字符输出流InputStreamReader: 可以将字节输入流转换为字符输入流package com.lili.file;import java.io.*;/** * 转换流 * OutputStreamWriter:可以将字节输出流转换为字符输出流 * InputStreamReader: 可以将字节输入流转换为字符输入流 * * @author: QiJingJing * @create: 20原创 2021-07-08 16:20:21 · 348 阅读 · 0 评论 -
File类的基本操作方法
File类的基本操作方法package com.lili.file;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Date;import java.util.logging.SimpleFormatter;/** * File类的使用 * * @author: QiJingJing *原创 2021-07-08 13:51:50 · 652 阅读 · 0 评论 -
Lambda表达式
Lambda表达式Lambda表达式是整个java8发行版中最受期待的在java语言层面上的改变,Lambda允许把函数作为一个方法的参数,或者把代码看成数据。Lambda表达式用于简化java中接口式的匿名内部类,被称为函数式接口的概念。函数式接口就是一个具有一个方法的普通接口,像这样的接口,可以被隐式转换为Lambda表达式package com.lili.lambda;import java.util.Arrays;import java.util.Comparator;/** * l原创 2021-07-08 09:24:45 · 108 阅读 · 0 评论 -
数据结构之二叉树实现排序功能
数据结构之二叉树实现树是一种非线性数据结构,直接观看,它是数据元素(在树种称为结点)按分支关系组织起来的结构,二叉树(Binart Tree)是每个节点最多有两个子树的有序树。通常子树被称做为“左子树”和“右子树”二叉树算法的排序规则:1.选择第一个元素作为跟节点2.之后如果元素大于根节点放在右子树,如果元素小于根节点,则放在左子树3.最后按照中序遍历的方式进行输出,则可以得到排序的结果(左->根->右)package com.lili.binaryTree;/** * 二叉树原创 2021-07-07 14:59:45 · 319 阅读 · 0 评论 -
MD5工具类(信息摘要算法)
MD5工具类(信息摘要算法)package com.lili.MD5;import java.nio.charset.StandardCharsets;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Base64;import java.util.Objects;/** * MD5信息摘要算法 * * @author: QiJingJin原创 2021-07-07 13:56:04 · 282 阅读 · 0 评论 -
数字处理工具类
数字处理工具类BigInteger:可以让超过Integer范围内的数据进行运算构造方法:public BigInteger(String val)常用方法:public BigInteger add(BigInteger val)public BigInteger subtract(BigInteger val)public BigInteger multiply(BigInteger val)public BigInteger divide(BigInteger val)public原创 2021-07-07 12:25:43 · 183 阅读 · 0 评论 -
System与Runtime类
System与Runtime类System:System代表系统,系统级的很多属性和控制方法都放在该类的内部,该类位于java.lang包。1.成员变量System类中包含in,out和err三个成员变量,分别代表标准输入流(键盘输入)。标准输出流(键盘输出),和标准错误输出流2.成员方法System类中提供了一系列系统级的操作方法(1).public static void arraycopy(Object src,int srcPos,Object dest,int desPos,int原创 2021-07-06 16:20:39 · 572 阅读 · 0 评论 -
java中对象的克隆
对象的克隆将一个对象复制一份,称为对象的克隆。在Object类中存在一个clone()方法:protected Object clone()throws CloneNotSupportedException如果某个类的对象想要被克隆,则对象所在的类必须实现Cloneable接口,此接口没有定义任何方法,是一个标记接口例:package com.lili.clone;/** * 克隆对象 * 1.实现Cloneable接口(标记接口) * 2.重写Object类中的clone方法 *原创 2021-07-06 15:20:17 · 375 阅读 · 0 评论 -
Comparable与Comparator对象比较
Comparable与Comparator对两个或多个数据项进行比较,以确定它们之间的大小关系及排列顺序称为比较。1.Comparable接口:此接口强行对实现它的每个类的对象进行整体排序,这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。package com.lili.comparable_comparator;import java.util.Arrays;/** * 对象比较 * comparable接口: * 要进行比较的类需要实现comparab原创 2021-07-06 14:59:03 · 182 阅读 · 0 评论 -
Date类
Date类package com.lili.date;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.*;/** * Date类 * @author: QiJingJing * @create: 2021/7/6 */public class Test1 { public static void main(String[] args){ Date da原创 2021-07-06 11:31:37 · 115 阅读 · 0 评论