Java基础
ReCodingLife
这个作者很懒,什么都没留下…
展开
-
XML解析,适合XML,JavaBean,数据库之间转换的需求
节点类@Data@AllArgsConstructor@NoArgsConstructorpublic class NodeStructure { /** * 节点id */ int id; /** * 父节点id */ int pid; /** * 节点名 */ String selfname; /** * 节点文本 */ String text;}原创 2022-01-14 17:36:09 · 308 阅读 · 0 评论 -
算法题-合并连续的数字
题目有一个整型数组, {1, 2, 3, 5, 7, 9, 10, 11, 12, 26, 27}, 将其中连续的数字用 “-” 连接,输出格式如: 1-2,3,5,7,9-10,11-12,26-27代码 private static String mergeContinueNumToStr(int[] nums1) { StringBuffer sb = new StringBuffer(); int length = nums1.length; f原创 2021-08-25 16:19:47 · 507 阅读 · 0 评论 -
利用Java8新特性根据id,pid获取树形结构
实体类@Data@JsonInclude(JsonInclude.Include.NON_NULL)public class SysPermission { private Integer id; private Integer pid; private List<SysPermission> children;}形成树形结构最关键的是id和pid,其他属性不关键,可以自行定义.关键代码 // ...上面是获取List<SysPermission&原创 2021-06-30 17:45:23 · 2114 阅读 · 1 评论 -
简单Maven项目含依赖打包
1、pom<build> <plugins> <!-- 指定启动类,将依赖打成外部jar包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId>原创 2021-06-07 14:19:39 · 177 阅读 · 0 评论 -
java初学模拟斗地主发牌
public class PokerDemo { public static void main(String[] args) { // 一副扑克牌 HashMap<Integer, String> pokerMap = new HashMap<>(); // 用来控制牌的顺序 List<Integer> sortCtrlList = new ArrayList<>();原创 2021-04-27 15:37:16 · 66 阅读 · 0 评论 -
java 使用 PDFbox合并多个pdf文件
maven <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.原创 2021-04-15 17:25:35 · 416 阅读 · 0 评论 -
获取一个日期范围里的每一个月
2020-10,2021-04当我们获取到这样一个日期范围, 要怎么获取到所有的月份// 解析月期范围 String[] split = monthRange.split(","); Date d1 = new SimpleDateFormat("yyyy-MM").parse(split[0]);//定义起始日期 Date d2 = new SimpleDateFormat("yyyy-MM").parse(split[1]);//定义结束日期.原创 2021-04-07 08:53:41 · 313 阅读 · 0 评论 -
Java Properties属性集&ResourceBundle工具类
属性集概述java.util.Properties 继承于 Hashtable ,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。该类也被许多Java类使用,比如获取系统属性时,System.getProperties 方法就是返回一个Properties对象。Properties类构造方法public Properties() :创建一个空的属性列表基本的存储方法public Object setProperty(String key, String va原创 2020-05-08 19:35:50 · 161 阅读 · 0 评论 -
JDK7前后对I/O资源的处理对比
JDK7之前的处理之前的入门练习,我们一直把IO异常抛出,实际开发中并不能这样处理,建议使用try…catch…finally 代码块,处理异常部分.案例需求: 将readTest的内容copy到copyTest代码使用演示import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;p...原创 2020-05-08 17:01:18 · 105 阅读 · 0 评论 -
Java FileReader和FileWriter类
字符流当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。FileReader和FileWriter类FileReader 和 FileWriter 字符流对应了 FileInputStream和 FIleOutputStream类. 方...原创 2020-05-08 16:24:54 · 151 阅读 · 0 评论 -
Java中字节流
一切皆为字节一切文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,都是一个一个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据。输入/输出流Java语言定义了许多类专门负责各种方式的输入/输出,这些类都被放到了 java.io 包中。其中,所有输入流类都是抽象类InputStre...原创 2020-05-07 19:50:54 · 318 阅读 · 0 评论 -
Java中I/O流对文件进行复制粘贴及可能会出现的问题
需求:将E:\电脑桌面壁纸\MisakaMikoto.jpg图片文件复制到D:\某科学的超电磁炮 目录下public class Test { public static void main(String[] args) throws IOException { //创建字节输入流对象,关联数据源文件路径 FileInputStream fis = new...原创 2020-05-07 19:48:41 · 368 阅读 · 0 评论 -
Java中的I/O流
原创 2020-05-07 17:47:40 · 72 阅读 · 0 评论 -
递归
概述在数学上,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数。简单来讲就是在当前函数表达式内再使用本身的表达式。在编程语言中,指在当前方法内直接或间接调用自己的这种现象。如:public static void a(){ a();}递归求和请使用递归计算从1–10...原创 2020-05-07 17:42:42 · 149 阅读 · 0 评论 -
Java中File类及其常用方法
概述File类是 java.io 包中唯一代表磁盘文件本身的对象。一般用于文件的创建、删除、重命名等操作。绝对路径与相对路径绝对路径:从盘符开始的路径,这是一个完整的路径。相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。构造方法public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。publ...原创 2020-05-07 17:29:55 · 527 阅读 · 0 评论 -
Java中的Stream
前提概要在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。先看现象传统集合的多步遍历代码几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元素进行操作的时候,除了必需的添加、删除、获取外,最典型的就是集合遍历。例如:List<String>...原创 2020-05-07 14:02:39 · 157 阅读 · 0 评论 -
Java中Stream流综合案例
需求:现在有两个ArrayList集合存储队伍当中的多个成员姓名,要求使用Stream流,依次进行以下若干操作步骤:1. 第一个队伍只要名字为3个字的成员姓名;2. 第一个队伍筛选之后只要前3个人;3. 第二个队伍只要姓张的成员姓名;4. 第二个队伍筛选之后不要前2个人;5. 将两个队伍合并为一个队伍;6. 根据姓名创建Person对象;7. 打印整个队伍的Person对象信息。P...原创 2020-05-07 13:59:53 · 1093 阅读 · 0 评论 -
Java中的Lambda表达式
函数式编程思想函数在数学中的定义从集合、映射的方向去出发, 从输入量到输出量的计算法则,也就是“拿什么东西做什么事情”。相对而言,面向对象则过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。举个栗子,启动一个线程, 用面向对象的方式,我们会这样写 // 匿名内部类方式创建线程执行任务new Thread(new Runna...原创 2020-05-07 13:05:15 · 98 阅读 · 0 评论 -
线程的等待与唤醒
线程的生命周期在介绍线程的等待与唤醒之前, 我们先了解一下线程的生命周期。 其中包括6种状态, 分别为 New(新建)、Runnable(可运行)、Blocked(阻塞状态)、Waiting(无限等待)、TimeWaiting(计时等待)和Teminated(死亡状态)。线程周期的各种状态:线程的等待与唤醒当处于运行状态下的线程调用 Thread 类中的 wait() 方法时,该线程便进入...原创 2020-05-05 19:49:20 · 598 阅读 · 0 评论 -
线程死锁
死锁定义: 在多线程程序中,使用了多把锁,造成线程之间相互等待.程序不往下走了。产生死锁的条件1.有多把锁2.有多个线程3.有同步代码块嵌套死锁代码及现象public class Test21 { public static void main(String[] args) { Object obj1 = new Object(); Obj...原创 2020-05-05 19:03:22 · 106 阅读 · 0 评论 -
创建线程的方式执行任务与创建线程方式执行任务
线程池思想我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解...原创 2020-05-05 18:58:40 · 699 阅读 · 0 评论 -
线程的安全问题与解决方案
多行代码原子性问题描述AtomicInteger类只能保证"变量"的原子性操作,而对多行代码进行"原子性"操作,使用AtomicInteger类就不能达到效果了。先看现象,代码演示public class TicketsSaleRunnable implements Runnable { int tickets = 100; @Override public vo...原创 2020-05-03 13:23:42 · 117 阅读 · 0 评论 -
多线程的可见性问题与使用volatile关键字解决变量访问的可见性问题
可见性问题的现象代码演示public class Test { private static boolean flag = true; public static void main(String[] args) { new Thread(){ @Override public void run() { ...原创 2020-05-03 10:45:27 · 310 阅读 · 0 评论 -
选择排序
选择排序概念选中数组的某个元素,其后面的元素依次和选中的元素进行两两比较,将较大的数据放在后面,依次从前到后选中每个元素,直至所有数据按要求完成排序如果有n个数据进行排序,总共需要比较n-1次每一次比较完毕,下一次的比较就会少一个数据参与选择排序图解代码实现private static void selectSort(int[] arr) { for (int i = ...原创 2020-05-01 10:50:01 · 98 阅读 · 0 评论 -
冒泡排序
冒泡排序概念一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序如果有n个数据进行排序,总共需要比较n-1次每一次比较完毕,下一次的比较就会少一个数据参与冒泡排序图解代码实现 int[] arr = {44,11,33,55,22}; for (int i = 0; i < arr....原创 2020-05-01 10:46:12 · 139 阅读 · 0 评论 -
双列集合Map的两种遍历方式
方式一:键找值方式通过元素中的键,获取键所对应的值分析步骤:获取Map中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键。遍历键的Set集合,得到每一个键。根据键,获取键所对应的值。代码演示: Map<String, String> map = new HashMap<>(); // 往集合中添加键值对 map...原创 2020-05-01 10:38:56 · 915 阅读 · 0 评论 -
增强for
增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。格式:for(元素的数据类型 变量 : Collection集合or数组){//写操作代码}代码演示public class NBForDemo1 { public static...原创 2020-05-01 09:40:29 · 116 阅读 · 0 评论 -
Iterator迭代器
Iterator接口介绍在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口java.util.Iterator 。构造方法:public Iterator iterator() : 获取集合对应的迭代器,用来遍历集合中的元素。Iterator接口的常用方法如下:public E next() :返回迭代的下一个元素。public boolean has...原创 2020-05-01 09:29:50 · 165 阅读 · 0 评论 -
Java中Date对象与String对象之间的转换
DateFormat抽象类与其子类SimpleDateFormatDateFormat类DateFormat类的概述: java.text.DateFormat类,是日期/时间格式化子类的抽象类.特点:1.DateFormat类是一个日期格式抽象类,所以不能创建该类对象,只能创建其子类对象2.通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进...原创 2020-04-29 15:37:41 · 329 阅读 · 0 评论