
Java
Java 技术专栏
菜根檀
这个作者很懒,什么都没留下…
展开
-
数据结构之优先队列
数据结构之优先队列priority queue属性简单示例priority queue普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。属性优先队列的属性和队列类似主要包括以下部分int size() 返回队列的长度boolean add(E) / boolean offer(E) 向队列尾部中原创 2022-03-19 22:35:49 · 376 阅读 · 1 评论 -
每日设计模式-观察者模式
观察者模式定义代码演示使用场景举例优缺点优点缺点定义在软件系统中,如果一个对象的状态发生改变,某些与他相关的对象也要随之做出相应的变化。观察者模式包含观察目标(被观察者)和观察者两类对象,一个目标可以有任意数目的与之相依赖的观察者,一旦观察目标的状态发生变化,所有的观察者都将得到通知(定义对象之间一种一对多的关系)。代码演示1、被观察者(Subject)import java.util.Vector;// 用Vector是因为多线程时Vector是线程安全的,而List不是public abs原创 2022-02-01 23:31:43 · 835 阅读 · 1 评论 -
每日设计模式-适配器模式
适配器模式定义使用情景实现理解代码类适配器使用分析优点:缺点:定义适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁,这种设计模式属于结构型模式,他结合了两个独立接口的功能。将一个类的接口转换成客户希望的另外一个接口,是适配器需要做的事情,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。使用情景1、系统需要使用现有的类,但是现有类的接口不符合系统的需要(核心需求)。2、通过接口转换,将一个类插入到另外一个类。(有个例子比较形象,比如老虎和飞禽,现在需要原创 2022-01-31 23:58:38 · 770 阅读 · 0 评论 -
每日设计模式-原型模式
原型模式 Prototype Pattern定义实现定义用原型实例指定创建对象的种类,并且通拷贝这些原型创建对象。简单地说,一切支持复制的类都可以称为原型。实现在java中可以通过实现Cloneable接口,重写clone()方法来实现。public class Student implements Cloneable{ private String name; private String sex; private int age; public String原创 2022-01-30 23:07:45 · 694 阅读 · 0 评论 -
每日设计模式-建造者模式
建造者模式定义使用场景实例化对象的常见方式分析代码理解优点定义将一个复杂对象的构建与其表示分离,使得同样的构建过程可以用于不同的表示。主要应用于当我们创建对象的时候,对象的属性是不确定的,及有的属性可能是可选的(如电脑,CPU,GPU,RAM是必有的,但其他有的部件可能是可选的,如USB接口数量,显示器)。使用场景当一个类的构造函数参数个数超过四个,而这些参数有些是可选参数,考虑使用建造者模式。实例化对象的常见方式当一个类的构造函数参数大于4,且有些参数为可选时。通常实例化对象有两种方式:(1原创 2022-01-29 23:24:17 · 1056 阅读 · 0 评论 -
每日设计模式-单例模式
单例模式定义代码理解定义单利模式(Singleton Pattern)理解起来比较简单,指的是保证在类使用过程中,通过类实例化的对象始终只有一个,如果该对象不存在则创建,若存在则使用已存在的,常见的案例是网站的访问统计,当用户访问网站时可以不必每次都往数据库存储,可以先通过单例缓存,然后一定时间再写入数据库。代码理解定义一个单例模式类public class SingletonObject { private static SingletonObject instance; pr原创 2022-01-29 12:05:10 · 1146 阅读 · 0 评论 -
每日设计模式-抽象工厂模式
每日设计模式-抽象工厂模式定义抽象工厂模式的主要角色:代码理解抽象工厂模式应用场景定义是一种为访问类提供一个创建一组相关或者相互依赖对象的接口,且访问类无需指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。使用抽象工厂模式一般要满足以下条件。系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品。系统一次只可能消费其中某一族产品,即同族的产品一起使用。抽象工厂模式除了原创 2022-01-27 00:23:15 · 364 阅读 · 0 评论 -
每日设计模式-工厂模式
每日设计模式-工厂模式工厂模式是使用最多的设计模式。其主要思想是不对客户暴露类实现的具体过程,用户需要什么,通过中间的调用类,来调用对应的工厂来实现首先,定义一个工厂接口public interface AnimalFactory { public void sayHello();}继承工厂接口,实现具体功能的工厂public class Cat implements AnimalFactory{ @override public void sayHello() { System.o原创 2022-01-25 23:33:57 · 249 阅读 · 0 评论 -
Java 使用Hibernate所用注解
Java 使用Hibernate所用注解@Entity注:若出现@Entity过时的警告则表示导入的@Entitiy错误,我们所用的应该是 import javax.persistence.Entity; 而不是 @org.hibernate.annotations.Entity@Entity表明此类是一个实体类(数据库的一个表),需要与@Id结合使用,默认将类名作为表名,若需要更改表明,需使用@Table注解。映射规则: 2. 实体类必须用 @javax.persistence.Entity原创 2021-12-16 14:45:11 · 205 阅读 · 0 评论 -
Idea Maven项目Hibernate配置过程中的问题
Idea Maven项目Hibernate配置过程中的问题Could not locate cfg.xml resource [hibernate.cfg.xml] 如果你的项目是src/main/java,hibernate.cfg.xml不是放在java下,而是java下的resources中Unable to create requested service检查hibernate.cfg.xml,主要是(以my SQL 8为例):<property name="connect原创 2021-12-10 11:25:33 · 517 阅读 · 0 评论 -
Java DateFormatter转换时间格式 参数
Java DateFormatter转换时间格式 参数使用DateFormatter转换时间格式,需要的参数如下:G: 公元时代,例如AD公元yy: 年的后2位yyyy: 完整年MM: 月,显示为1-12MMM: 月,显示为英文月份简写,如 JanMMMM: 月,显示为英文月份全称,如 Janualydd: 日,2位数表示,如02d: 日,1-2位显示,如 2EEE: 简写星期几,如SunEEEE: 全写星期几,如Sundayaa: 上下午,AM/PMH: 时,24小时制,0-23原创 2021-12-09 15:28:20 · 1181 阅读 · 0 评论 -
Servlet 路径说明
以http://localhost:8080/servlet/path/abc/mnp?p1=1为例requestURL:http://localhost:8080/servlet/path/abc/mnp?p1=1requestURI:/servlet/path/abc/mnp?p1=1contextPath:/servlet/ (表示项目路径)servletPath:/path/ (表示servlet类映射的路径)pathInfo:/path/abc/mnpqueryString:p1=原创 2021-11-26 21:25:05 · 972 阅读 · 0 评论 -
Java中的BiPredicate
Java中的BiPredicate介绍BiPredicate + 方法介绍是一个函数式接口,表示接受两和变量返回一个boolean类型的值。与Predicate类似,只不过Predicate返回的是一个值@FunctionalInterfacepublic interface BiPredicate<T, U> { boolean test(T t, U u); default BiPredicate<T, U> and(BiPredicate<原创 2021-11-20 18:09:12 · 2445 阅读 · 0 评论 -
Java中的BiFunction
Java中的BiFunction介绍addThen(after)通俗解释BiFunction + 构造函数介绍BiFunction是一个函数式接口,表示一个接受两个输入值并返回一个输入值的运算符@FunctionalInterfacepublic interface BiFunction<T, U, R> { /** * Applies this function to the given arguments. * * @param t the原创 2021-11-20 17:44:27 · 6178 阅读 · 0 评论 -
Java中的BiConsumer
Java中的BiConsumer介绍Biconsumer方法实现addThen(BiConsumer after)介绍BiConsumer是一个函数式接口,代表一个接受两个输入参数且不返回任何内容的操作符@FunctionalInterfacepublic interface BiConsumer<T, U> { void accept(T t, U u); default BiConsumer<T, U> andThen(BiConsumer<? super原创 2021-11-20 17:03:18 · 17768 阅读 · 0 评论 -
Java中的谓词 Predicate
Java中的谓词 Predicate介绍Predicate + 方法Predicate的反义 -- negate()Predicate的and方法Predicate的or方法isEqual() 方法介绍Predicate 是一个函数式接口,表示接受输入参数并返回布尔值的运算符。@FunctionalInterface //函数式接口,只有一个未定义方法public interface Predicate<T> { boolean test(T t);}package cn.ca原创 2021-11-19 17:23:26 · 811 阅读 · 0 评论 -
力扣55.跳跃游戏
55.跳跃游戏题目描述给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 ,原创 2021-10-16 16:52:36 · 220 阅读 · 0 评论 -
力扣740. 删除并获得点数
740. 删除并获得点数题目描述给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入:nums = [3,4,2]输出:6解释:删除 4 获得 4 个点数,因此 3 也被删除。之后,删除 2 获得 2 个点数。总共获得 6 个点数。示例原创 2021-10-15 20:53:14 · 263 阅读 · 0 评论 -
力扣213. 打家劫舍II
213. 打家劫舍II题目你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例 1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋原创 2021-10-14 11:03:31 · 154 阅读 · 0 评论 -
力扣198. 打家劫舍
198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4原创 2021-10-14 10:11:44 · 86 阅读 · 0 评论 -
力扣746. 使用最小花费爬楼梯使用动态规划解法
746. 使用最小花费爬楼梯使用动态规划解法题目描述:数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。 示例 1:输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即原创 2021-10-13 10:47:58 · 155 阅读 · 0 评论 -
SpringBoot整合Druid数据库连接池的那些坑 【1】
配置完druid后报以下错误:Failed to bind properties under 'spring.datasource' to javax.sql.DataSource: Property: spring.datasource.filters Value: stat,wall,log4j Origin: class path resource [appl...原创 2020-04-07 22:18:34 · 3033 阅读 · 1 评论 -
Java Socket编程基础实战
JavaSocket编程基础利用Socket进行本地端口通信线程及Socket编程Socket是java网络编程的重要组成部分,包括我们所使用的网络通信或网络游戏,一般都是基于Socket进行编程的。所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口----原创 2020-11-21 21:45:45 · 902 阅读 · 0 评论 -
Java多线程具体代码实战
Java中的多线程通过继承Thread创建一个线程守护进程线程池join()首先,我们需要明白在Java中,多线程就是一个类或者一个程序执行或者管理多个线程执行任务的能力,线程总是处于5种状态之中,分别是:创建,可运行,运行中,阻塞,死亡。创建:使用 new 运算符后,该线程仅仅是一个空对象,系统没有分配资源,该线程处于创建状态(new thread)可运行:使用start()方法启动一个线程后,系统为该线程分配了除了CPU外的所需资源,该线程处于可运行状态(Runnable)运行:Java运行系统原创 2020-11-16 14:44:09 · 726 阅读 · 0 评论 -
Spring中IOC的简单实战理解
IOC:控制反转首先,我们回顾下我们平时普通不进行IOC时如果需要创建调用对象应该怎么实现,以下我们有4个类,分别是Dog,Animals,Cat,SayHellopublic class interface Animals{ public void sayHello();}public class Dog implements Animals{ @Override public void sayHello(){ System.out.println("wang wang"); }原创 2020-11-08 16:19:13 · 441 阅读 · 4 评论