自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 线程安全与线程池

本文概述了线程安全概念及解决方案。多个线程同时访问和修改共享资源会导致线程安全问题。解决方案是线程同步,核心思想是让线程依次访问共享资源,主要通过加锁实现。介绍了两种加锁方式:同步代码块(锁定核心代码)和同步方法(锁定整个方法),并比较了两者的范围与可读性。同时还介绍了锁对象选择规范、Lock锁、线程池技术及其创建方式(ThreadPoolExecutor和Executors),以及线程池处理Runnable和Callable任务的方法。最后提及了并发与并行的概念。

2025-06-02 16:21:43 588

原创 多线程( Thread)

线程:是一个程序内部的一条执行流程。多线程:是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)。

2025-06-01 22:18:20 890

原创 File—IO流

本文摘要:Java中File类用于操作文件和文件夹,但不能读写文件内容(需用IO流)。File对象可代表绝对/相对路径文件/文件夹,提供创建、删除和遍历方法。字符集方面,UTF-8可变长编码(汉字3字节),需注意编码解码一致性。IO流分为输入/输出流和字节/字符流:字节流(FileInputStream/OutputStream)适合所有文件操作但处理中文需注意;字符流专用于纯文本。大文件读取需防内存溢出,字节流更适合作数据转移如文件复制。(150字)

2025-05-30 23:35:35 1024

原创 运用集合知识做斗地主案例

使用了 Lombok 注解简化开发,生成 getter/setter 和 toString() 方法。使用 Collections.sort() 配合 Lambda 表达式进行自定义排序。size 表示点数,color 表示花色,num 是牌的“大小值”,在排序时使用。也可以传一个数组给它。一种特殊形参,定义在方法,构造器的形参列表里,格式:数据类型...参数名称;sizes 数组按从小到大的顺序排列,便于后续排序。手动添加大小王,并赋予更高的权值 num。num 值越大,牌力越强,在排序中排在前面。

2025-05-28 17:39:16 603

原创 Stream流

Stream流是jdk8开始新增的一套API,可以用于操作集合或者数组的数据Stream优势:Stream流大量的结合了Lambda的语法风格来编辑,功能强大,代码简洁,可读性好。

2025-05-28 09:47:08 799

原创 Map集合(双列集合)

摘要:Map集合是键值对结构,具有键唯一、值可重复的特性。常用实现类包括HashMap(无序)、LinkedHashMap(有序)和TreeMap(排序)。遍历方式有三种:键找值(通过keySet获取键集合)、键值对(通过entrySet获取键值对集合)以及JDK8的Lambda表达式(forEach方法)。示例代码展示了三种遍历方式的具体实现,并演示了Map的put、get等基本操作。Map作为双列集合的基础接口,其方法可被所有实现类继承使用。

2025-05-27 20:19:06 544

原创 Set系列集合

摘要:Set集合具有无序、不重复、无索引的特点。HashSet底层采用哈希表实现,JDK8前由数组+链表组成,之后加入红黑树优化性能;需重写hashCode()和equals()方法实现去重。LinkedHashSet通过双链表维护元素顺序。TreeSet基于红黑树实现排序,存储对象时需指定排序规则:方式一实现Comparable接口,方式二使用Comparator构造器。当两种比较器并存时,优先采用Comparator,若其返回0则视为相等元素不再插入。

2025-05-26 23:06:56 733

原创 Collection集合遍历的三种方法

原因是,当for循环中的索引i在第一个元素时,该元素不包含枸杞,i++,索引遍历至第二个元素,第二个元素包含枸杞,删除,i++,索引遍历至第三个元素,但此时红枸杞元素会因黑枸杞的删除而前移,至第二个元素,所以红枸杞未判断,没有删除。迭代器初始在集合的第一个元素,while循环判断条件为当前元素是否为空,打印时的.next()是将索引遍历到下一个元素。注意:增强for循环/Lambda遍历均不能解决并发修改异常问题,因此增它们只适合做数据的遍历,不适合同时做增删操作,说明:结合lambda遍历集合。

2025-05-25 22:38:44 624

原创 匿名内部类与函数式编程

摘要:匿名内部类是一种一次性使用的特殊内部类,适合创建仅需一次的对象,能使代码更简洁。它即时定义并实例化,常用于事件监听和线程实现。JDK8引入的Lambda表达式可替代部分匿名内部类,但仅适用于函数式接口(仅含一个抽象方法的接口,用@FunctionalInterface注解声明)。例如,Swim接口的匿名实现可用Lambda简化为()->{...},使代码更清晰。

2025-05-25 11:42:10 452

原创 二叉树知识点

深度为 k 的,有 n 个节点的二叉树,当且仅当其每一个节点都与深度为 k 的满二叉树中编号从 1 至 n 的节点一一对应时,称之为完全二叉树。完全二叉树从根节点到倒数第二层是满的,最后一层节点从左到右依次排列,可能不满,但节点都是从左到右依次存在。

2025-04-29 18:43:43 1052

原创 栈和队列学习记录

栈只允许在表的一端进行插入和删除操作,这一端被称为栈顶(Top),另一端则是栈底(Bottom)。这种受限的操作方式使得栈遵循后进先出(LIFO,Last In First Out)的原则,即最后进入栈的元素最先出栈.栈的插⼊操作叫做进栈/压栈/⼊栈,⼊数据在栈顶。栈的删除操作叫做出栈。出数据在栈顶。

2025-04-23 20:23:56 898

原创 LinkedList与链表

由于顺序表ArrayList在有些操作时效率较低,如在任意位置插入或者删除一个元素,需要将该位置后面的所有元素进行前移或者后移,时间复杂度为O(n),效率比较低,所以ArrayList不适合做频繁任意位置插入的场景,此外,还有扩容机制导致的内存使用效率较低,因此,Java集合又引入了链表结构(LinkedList)。

2025-04-23 09:36:20 600

原创 链表面试题

首先判断极端条件,两个链表其中有一个为null时,则无需合并,直接返回非空链表即可,当两个链表都不为null时,定义一个newH来存放比较过之后较小的节点,分别取两个链表的头节点进行比较大小,将较小的节点放在newH,然后移动newH的头节点tmp,将其下一个节点的地址给到被移走的链表的头节点,让其再次与较大者进行比较,直至两个链表一个为空,全部节点都放到了新链表当中,直接将另一个非空链表拼接到newH后面即可。新链表是通过拼接给定的两个链表的所有节点组成的。8. 输⼊两个链表,找出它们的第⼀个公共结点。

2025-04-19 20:29:25 581

原创 ArrayList与线性表中的顺序表

ArrayList是Java集合框架中一个非常常用的类,它实现了List接口,是一个动态数组,即长度可以自动增长的数组。以下从多个方面对ArrayList。

2025-04-15 18:22:32 685

原创 常用方法集合

charAt 方法是用于获取字符串或 StringBuilder 中指定位置的字符。在 String 类和 StringBuilder 类中都有这个方法,但它们在功能实现上有一些细微的上下文差异。

2025-04-14 23:10:52 262

原创 泛型的深度认识

在编译时,Java编译器会将泛型类型信息从代码中移除,这个过程就叫做类型擦除。擦除后,泛型类型会被替换为其边界类型(通常是Object)或者指定的类型。•将泛型参数替换为其边界或Object。• 在必要的地⽅插⼊类型转换以保持类型安全。• ⽣成桥接⽅法以保持多态性。

2025-04-14 17:53:23 904

原创 数据结构(一)

也称为时间复杂度,主要衡量的是一个算法的运行速度。时间复杂度是衡量算法运行时间随输入规模增长的变化趋势。常见的时间复杂度从低到高有 O(1)(常数时间)、 O(logn)(对数时间)、 O(n)(线性时间)、 O(nlogn)(线性对数时间)、 O(n2)(平方时间)等。也称为空间复杂度,*+-问的5芙uiokl主要衡量的是一个算法运行过程中所需要的额外空间。常见的空间复杂度有 O(1)(常数空间)、 O(n)(线性空间)等。

2025-04-14 16:41:46 1266

原创 单例、工厂、代理模式

单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点来访问这个实例,其可以避免资源浪费和冲突。单例模式的特征:唯一实例:类只能创建一个实例。私有构造函数:禁止外部通过new关键字创建对象。全局访问点:通过静态方法(如getInstance())获取实例。实现单例模式的两种方式:饿汉式和懒汉式。

2025-04-02 18:03:48 980

原创 字符串—String

对于内置类型,==比较的是变量中的值,对于引用类型==比较的是引用中的地。3.1.2equals方法:按照字典序比较(字符大小的顺序)String类重写了⽗类Object中equals⽅法,Object中equals默认按照==⽐较,String重写equals⽅法后,按照如下规则进⾏⽐较,⽐如: s1.equals(s2)3.1.3compareTo方法:按照字典序比较compare方法与euqals方法不同的是,后者返回类型是boolean类型的,而前者返回类型为int类型。

2025-03-24 23:28:59 1445

原创 Javase接口完

在Java中类和类之间的关系是单继承的,一个类可以实现多个接口,接口与接口之间可以实现多继承。即用接口可以达到多继承的目的。接口可以继承另一个接口,达到复用的效果,继承时使用extends关键字。如果一个类要实现这个接口那么需要把当前接口和其接口继承的接口中所有的方法重写。

2025-03-20 23:18:58 608

原创 Javase抽象类和接口初识

如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类从语法上将抽象类使用abstract修饰。语法:public abstract class Animal(){}

2025-03-19 11:28:17 1572

原创 Javase继承完+多态

继承支持单继承,多层继承(A继承B,C继承A),不同类继承一个类,但是不支持多继承(一个子类有多个父类)注意:继承层次不要太复杂,一般不超过三层继承关系父类中被praivate修饰的成员变量,方法,在子类虽然被继承了,但是不能在子类当中调用。

2025-03-16 23:18:23 810

原创 Javase继承补充

super可以访问父类成员变量及方法,也可调用父类当中指定的构造方法。super关键字和this一样只能在非静态方法中使用,不可在静态方法中使用。

2025-03-15 16:58:01 735

原创 static关键字和继承

在Java中,继承时面向对象编程的一个重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的复用和扩展。通过extends关键字来实现继承模块:修饰符class 子类extends 父类。

2025-03-12 22:37:02 542

原创 Javase之包和封装

1.在文件的最上方(即第一条语句前面只能有注释或者空行)加一个package语句指定该源文件在哪个包里2.包的名字全部要用小写字母组成,多个单词也保持小写,若包含多个层次,之间用"."隔开。一般使用倒置的域名开头(无www)如:com.example,且自定义包不能以java开头。

2025-03-11 16:30:37 865

原创 Javase之类和对象

实例化是指用你所定义的一个类,用类重新创建对象的过程,称为类的实例化new关键字用于创建一个对象的实例,使用来访问对象中属性和方法,同一个类可以创建多个实例。

2025-03-10 17:33:23 768

原创 Javase之数组的定义和使用及操作数据工具类Arrays

数组的初始化分为动态初始化和静态初始化动态初始化:在数组创建时直接指定数组中元素的个数静态初始化:在数组创建时并bi没有制定数组元素的个数,而是直接存入与数组类型相同的数据,编译器会根据{}中元素个数自动判断出数组的长度,静态初始化时可以简写,省去后面的new T[ ]。语法格式:T[ ] 数组名称={data1,data2,data3,...,datan};数组也可按照C语言方式创建,不推荐静态初始化和动态初始化可分为两步,但是省略格式不可以。

2025-03-09 12:29:29 412

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除