java
文章平均质量分 73
c_o_d_e_
写一个博客就一定要掌握这个知识!
展开
-
JSON字符串作为入参时,转换为具体对象
java.util.LinkedHashMap cannot be cast to JSON字符串转换为对象原创 2024-01-31 17:32:09 · 587 阅读 · 0 评论 -
Java 设计模式 - 单例模式
在有些系统中,为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式。单例模式的定义与特点单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应.原创 2021-03-23 12:57:14 · 164 阅读 · 0 评论 -
Java 日期相关的几种API
日期其实基本每个项目必用,但API比较多又杂乱,懒得记忆,这里就整理一下做个记录目录java.util.Date(处理麻烦,不推荐)java.sql.Date(适用于Sql)java.util.Calendar(线程不安全)Java 8新版的API(推荐使用)java.util.Date(处理麻烦,不推荐)原创 2021-02-02 23:46:22 · 283 阅读 · 0 评论 -
SpringBoot使用@RequestParam和@RequestBody获取GET和POST请求
前面两篇博客从客户端角度深入的分析了GET和POST的差异性和应用场景(从跨域问题探究Ajax的GET请求和地址栏发起GET请求的区别、从使用角度分析GET和POST的差异性 应用场景)这篇博客就讲一下在服务端如何正确的处理GET和POST请求spring boot中处理前端的GET和POST请求时,常用到的两个注解是@RequestParam和@RequestBody@RequestParam:获取以&分割的数据,适用于获取一些比较少量的参数数据。@RequestBody:获取请求原创 2021-01-30 17:07:06 · 15514 阅读 · 1 评论 -
Java NIO文件传输
上次写了个OIO的的Sokcet编程,现在把最近学习的NIO补上客户端:Clientimport java.io.Closeable;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;i原创 2021-01-24 16:16:22 · 611 阅读 · 0 评论 -
Java 有趣的程序编译
今天看到一道题,很有意思,特此记录一下。public class Test { public static void main(String args[]) { int a = 0; int b = 0; while(a < 10){ b = b++; a++; } System.out.println(b); }}大脑编译一下,直觉告诉我每次循环原创 2021-01-06 17:39:00 · 291 阅读 · 3 评论 -
Java 数组的length方法对时间复杂度的影响问题
最近无意中看到一个问题,提到循环数组时,是否在循环体中使用length会影响时间复杂度。由于看了没保存,现在找不到在哪了,大概意思就如下面的代码。只记得这个问题是基于C语言提出的,所以我很好奇java语言中,是否存在这种问题。int[] num = {9,3,1,2,7};//这种写法,每次循环都要获取num.length,而获取num.length就要去遍历num,这样就会造成O(N^2)的时间复杂度for(int i = 0; i < num.length; i++){ ...原创 2021-01-06 16:05:07 · 1941 阅读 · 3 评论 -
Java 数据结构与算法 环形队列
最近由于忙其他事情,有一段时间没有接触一些基础的数据结构了,前两天遇到一个手写环形队列的题,都搞忘了,再次特地写一篇博客,记录一下,加深印象。环形队列主要是有几个公式容易忘记,其实理解了也很简单。几个必要的变量说明int[] arr:存储队列的数组,也可以用链表做,这里不多赘述int maxSize:数组的长度,也是队列的最大长度,通常是初始化队列时传入int front:队头指针,记录数组中队列的队头下标int size:当前的队列的长度注:以前学习数据结构时,一般老师或者教原创 2020-12-30 13:09:34 · 167 阅读 · 0 评论 -
Java LinkedList作为栈和队列的使用
最近用java写一些算法时,经常遇到要使用栈和队列结构(比如树的各种遍历等等),使用栈的话,Stack已经不被推荐使用了,所以栈和队列我们通常都是用LinkedList这种双链表结构实现,用的多了自然就开始好奇它的各种操作具体是怎么实现的?先下面分别从用法和源码角度简单记录下如何用LinkedList实现栈和队列作为栈使用时,push是入栈,pop / poll是出栈,peek是获取栈顶元素具体使用如下示例:LinkedList<String> stack = new .原创 2020-12-11 14:08:56 · 2276 阅读 · 2 评论 -
Java 随机获取多个不重复的数字
最近在做一些算法测试时,为了方便测试,自己写了一个获取多个随机数字的小Demopublic class GetArrays { /** * 获取随机数组 * @param arrLength 随机数组长度 * @return 随机数组,可重复 */ public static int[] getArrays(int arrLength){ int arr[] = new int[arrLength];//随机数个数为数组长度原创 2020-12-02 19:13:44 · 1238 阅读 · 0 评论 -
Java 数据结构与算法 二叉树的常见操作
下面通过一个实例来简单实现下二叉树的常见操作创建一个树结构TreeNode类:/** * 二叉树结构 - 子节点 */public class TreeNode { Object data;//泛型数据对象 TreeNode lchild;//左子节点 TreeNode rchild;//右子节点 //默认构造方法 public TreeNode(Object data,TreeNode lchild,TreeNode rchild) {原创 2020-11-29 16:37:40 · 159 阅读 · 0 评论 -
Java Socket网络编程 TCP / UDP
TCPTCP连接最大的特点就是需要对方始终开启端口,才能够进行通信,这样能够保证通信数据传输过程中不会丢失。所以常说的TCP有连接、安全就是这个道理。下面写一个小Demo,通过TCP实现信息传递和文件传输编写客户端类:ClientDemo import java.io.*;import java.net.InetAddress;import java.net.Socket;//客户端public class ClientDemo { public static voi原创 2020-11-24 17:20:47 · 363 阅读 · 5 评论 -
List集合循环添加对象会重复的原因及解决办法
最近在开发中,遇到个以前还没怎么遇到过的问题,可能是开发经验太少了吧,不过才个坑就最好把这个坑补上,下次才不会再掉进去。Android开发,从数据库读取一些用户的数据,我使用的是List集合来存储一个用户对象,然后传给前台,但却是发现取到的数据居然是重复的。我当时的写法大概是下面这样的//后台读取数据库的对象数据List<User> list = new ArrayList<>();User u = new User();for (int i = 0; i <原创 2020-11-24 16:51:42 · 7519 阅读 · 13 评论 -
Java 设计模式 - 中介者模式
中介者模式其实理解起来还是蛮简单的,但是我看代码还是想了很久才逐渐弄明白。中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。中介者模式由四个部分组成抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。 具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 List 来管理同事对.原创 2020-11-17 22:39:26 · 131 阅读 · 0 评论 -
Java 设计模式 - 动态代理模式
代理模式的定义:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问代理模式通常分为静态代理模式和动态代理模式。简单来理解代理模式,其实就是客户端不直接对一个对象进行操作,而是将这些操作放在一个代理类中,由代理类完成操作,客户端只负责与代理类的交互即可。这样做一是可以提高代码的安全性、而是能够降低耦合度。代理模式通常由三个角色组成Subject:抽象主题角色 Proxy:代理主题角色 RealSubject:真实主题角色由于静态代理模式比较简单,后面再补上,这里先讲下.原创 2020-11-16 21:39:10 · 206 阅读 · 0 评论 -
ClassLoader简单理解-记录
部分内容参考至:https://www.jianshu.com/p/554c138ca0f5很多时候在需要使用类的反射来处理问题时,都会遇到ClassLoader,但只知道这个是类加载器,却不知道有啥用,从哪来的。特此记录一下。首先看定义,java通常有三种系统类加载器,其功能也各不相同,同时也支持自定义类加载器启动类加载器(Bootstrap ClassLoader): 这个类加载器负责将\lib目录下的类库加载到虚拟机内存中,用来加载java的核心库,此类加载器并不继承于ja..原创 2020-11-16 17:55:57 · 144 阅读 · 0 评论 -
Android实现小米手机自带的计算器
最近突发兴趣,想自己实现一个提供四则混合运算的计算器,心动不如行动,就开始用Android来具体的实现下。但这种小Demo听着简单,实现起来还是需要一些参考。考虑到界面的美观性,我最终选择了小米手机自带的计算器来模仿。这个计算器的图大概是这样的以前学习栈的时候,我们知道,要实现一个能进行简单混合运算的计算器功能,需要通过两个栈将中缀表达式转换为前缀表达式(或后缀表达式),而且逻辑也比较复杂。如果对这个有兴趣的可以看我另一篇博客,有程序的流程图:https://blog.csdn.net/c_o_原创 2020-11-07 00:49:24 · 2076 阅读 · 3 评论 -
单链表实现栈结构
最近遇到一种类型的算法题,是实现栈的pop、push、peek等方法的同时,还让实现min取得栈中最小值的功能, 题目最特殊的一点就是,要求时间复杂度为O(1)。具体的题目如下:请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);原创 2020-10-28 16:54:11 · 812 阅读 · 2 评论 -
Java 值引用、参数传递的问题详解
在讨论这个问题之前,先抛出两个概念:值传递和引用传递。学过程序的同学应该对两个概念不陌生,就算忘了也可以看看下面的定义回忆回忆。值传递:值传递是指在调用函数时将实际参数复制一份传递到函数中,在函数中如果对参数进行修改,不会影响到实际参数引用传递:引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,会影响到实际参数。原创 2020-10-22 13:10:02 · 356 阅读 · 2 评论 -
Java 简单记录下==和equals的区别与联系
日常开发中,对象的比较是肯定绕不开的,我自己以前也是似懂非懂,很多时候干脆两者都用上,但又觉得代码臃肿,而且这种方式并不可取,所以特地花点时间自己整理一篇博客来记录一下。 很多时候只知道==比较地址,equals比较地址指向的值,但开发中千变万化,死记硬背是行不通的,必须理解才行,下面的内容这些只是自己的理解,可能很多地方不是很严谨全面,但整体思路没错就行,可以作为参考首先引进一个叫做常量池的东西,把这个看明白了才明白后面的String部分内容原创 2020-09-14 14:05:08 · 131 阅读 · 2 评论 -
Java Timer定时器的四种方法
Timer定时任务代码简洁,用的较为广泛,但除了传递TimerTask外,还有后面的一些参数在使用时,容易搞混淆,所以我特意从源码中找出来,整理一下。 1.当传递的参数只有一个long类型的delay时,就是延迟delay毫秒执行一次,但线程不会被销毁public void schedule(TimerTask task, long delay) { if (delay < 0) throw new IllegalArgumentException("Negative delay..原创 2020-09-09 12:59:21 · 1078 阅读 · 0 评论 -
Java 数据结构与算法 单链表
单链表通过结点存储数据,每一个数据都是一个结点结点由当前数据的指针(这里可以理解为java的对象)、数据内容、下一个结点的指针三部分组成单链表的结构如下图看懂下面代码所需知识:java基础由于写的注释有点多,代码不是很简洁,望理解,适合新手阅读/** * 基础单链表增删改查的实现 * 思路: * 1.创建存储基本信息的结点(Node)类 * 2.创建单链表操作类对这些基本信息进行增删查改 */public class SingleListDemo1 { ..原创 2020-07-19 22:01:15 · 231 阅读 · 0 评论 -
递归的压栈出栈过程 - 动图演示
一个简单的java程序实现的递归public static void main(String[] args) { test(10); } static void test(int i){ System.out.println("非递归的i="+i); if(i>0){ test(i-2); System.out.println("递归“i-2”的i="+i); }原创 2020-07-16 14:02:28 · 3673 阅读 · 0 评论 -
Java 通过字节流实现文件复制的四种方式
功能:读取一个文件的字节流,在另一个文件夹将字节output到硬盘文件越大,四种方式的比较效果越明显输入:要复制的文件路径+文件名,该文件要复制的目标路径输出:复制所耗时间(毫秒)代码如下:import java.io.*;public class CopyFileDemo { public static void main(String[] args) throws IOException { String filepath = "...原创 2020-07-10 16:26:26 · 2935 阅读 · 0 评论 -
Java 通过递归实现简单的文件搜索
要求:传入文件名(或者文件类型),和要查找的文件目录,使用递归遍历此文件目录下的所有文件,找到该文件对象并输出如果没有找到则输出未找到直接上代码import java.io.File;import java.util.ArrayList;import java.util.List;public class SearchFile { public static List<File> searchResult = new ArrayList<>.原创 2020-07-07 22:47:56 · 628 阅读 · 0 评论 -
Java 通过注解和反射 实现模拟 Hibernate Validator验证框架对实体对象的字段验证功能
需求: 1实现对字段的非空校验 2实现对邮箱的正则验证 3实现对年龄字段的未成年判断输出: 若字段为空则打印注解传递的message 若邮箱格式正则验证不通过则输出邮箱格式错误 若年龄小于18则打印注解传递的message1 创建一个实体类(getter&&setter略)【下面的所有文件都在同一个包中】public class User { @NotNull() String userid;...原创 2020-07-06 20:40:28 · 388 阅读 · 0 评论 -
Java 通过反射实现一个“半成品框架”
反射是为了解决在运行期,对某个实例一无所知的情况下,如何调用其方法。利用java的反射机制可以很方便的对一个类进行各种操作,也是一个“框架”所依赖的核心功能之一。下面利用反射来完成一个“基础框架“的搭建,这个框架可以根据配置文件中配置的类路径去操作对应的类,那么每次运行就不需要修改java程序,只需要修改配置文件即可。框架功能:通过用户在配置文件设置的姓名和年龄来判断用户是否成年。1.创建一个用户类User,放在包reflex.FrameDemo下(简洁起见,就没有添加getter和s...原创 2020-07-05 18:58:52 · 257 阅读 · 0 评论 -
Java 多线程 买票问题和生产者消费者问题
Java 多线程 买票问题和生产者消费者问题原创 2020-07-03 17:19:30 · 488 阅读 · 1 评论 -
Windows 同时安装多个JDK版本(JDK14和JDK8)
我原先安装的是JDK14,没有任何问题,再次安装jdk1.8时,本来思路是,只需要修改JAVA_HOME路径即可,我配置的JAVA_HOME如下图:但后面就出现了问题,我想将版本改回14时,直接修删掉后再次运行java -version和javac -version都没问题,其实过程也不复杂,甚至很简单是不是。...原创 2020-06-03 15:16:49 · 5893 阅读 · 3 评论