自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法 二分查找例题

**需要在while循环中定义,因为每次查找后middle都要依靠最新的right或left位置 更新自身位置.*如果定义在while循环上面的话,虽然right和left在while循环中一次次的更新了*但是无法重新执行循环上面的代码,所以无法更新middle的值*/

2025-02-23 11:09:57 319

原创 反射:获取类中的成分、并对其进行操作

a、可调用getDeclaredConstructors方法,获取全部构造器(只要存在就能拿到(只要存在就能拿到,也就是说私有的构造器也可以)1、如何检验是否获取了想要的构造器,可以调用getParameterCount()方法可获取构造器的参数数量,以此判断是否是想调用的构造器。2、调用getDeclaredConstructor()方法可获取某个构造器,如果不写参数,即代表调用无参数构造器。//以要传的参数来定位。a、getDeclaredMethods()方法可以获取所有存在的成员方法(包括私有的)

2025-02-11 00:01:20 515

原创 线程同步方法一:同步代码块

为什么要用this作为锁对象,因为 synchronized (this) {}这行代码是在public void drawAccount() {}这个方法里的,所以this可以拿到调用drawAccount这个方法的对象。所以无论有多少个该类的实例,所有对该类静态资源的访问都会受到这同一个锁的保护。因为互斥访问:同一时间只有一个线程能持有锁并执行同步块内的代码,其他线程会被阻塞,直到锁被释放。,意味着锁与当前对象实例绑定。每个对象实例都有自己独立的锁,因此不同实例之间的操作不会互相阻塞。

2025-02-05 12:00:19 256

原创 多线程的常用方法

哪个线程调用这个代码,就拿到哪个线程。最好在线程启动之前修改名字,因为线程启动之后,如果执行过快的话,那么在调用 setName() 之前线程可能就已经结束了。主线程在子线程开始之前就已经执行到了i等于3,这可能是因为主线程的循环执行得非常快,而子线程的启动需要一定的时间。所以在这个代码例子中,是主线程在调用这个代码,那就可以拿到主线程。这个方法的返回值是线程。作用:让线程睡眠,阻塞。

2025-02-04 23:05:18 337

原创 多线程创建方式三:实现Callable接口

如果主线程调用 FutureTask.get() 时会阻塞并等待子线程执行完毕,那么主线程发现第一个线程还没有执行完毕,则主线程会一直等待,直到第一个线程执行完毕,主线程才会往下执行。3、把Callable接口实现类的对象作为参数传递到FutureTask的构造方法中,创建FutureTask对象成为线程任务对象。> 定义一个类实现Callable接口,重写call方法,封装要做的事情,和要返回的数据。6、线程执行完毕后、通过FutureTask对象的的get方法去获取线程任务执行的结果。

2025-02-04 22:13:09 216

原创 多线程创建方式二:实现Runnable接口

都是要调用Thread类的构造器,然后传一个Runnable接口类型的参数进去。所以我们的目标是创建一个Runnable接口类型的参数,第一种方法是传统方法,创建实现类然后创建实现类的对象,然后就可以当做参数传进Thread类的构造器了。线程任务对象无法调用start方法,因为它不是线程。所以我们要调用Thread的构造器,创建线程对象,然后用线程对象去调用start方法。3 把线程任务对象作为参数传递到Thread类的构造方法中,创建Thread对象。3 再调用线程对象的start()启动线程。

2025-02-04 16:29:56 199

原创 多线程的创建方式一:继承Thread类

当调用线程的start()方法时,JVM会创建一个新的线程,这个线程和主线程是并发执行的。也就是说,主线程在调用start()之后,并不会等待子线程执行完毕,而是继续执行自己的代码。所以它们是并行执行的。1 定义一个子类MyThread继承线程类java.lang.Thread,重写run()方法。● 缺点:存在单继承的局限性,线程类继承Thread后,不能继承其他类,不便于扩展。3 调用线程对象的start()方法启动线程(启动后还是执行run方法的)2 创建MyThread类的对象。

2025-02-04 14:00:53 317

原创 特殊数据流

你看到的“乱码”实际上是由于直接用文本编辑器查看了二进制数据造成的,并不是真正的数据损坏或错误。在目标文件写入的结果是�a@X������ 你好,这不是乱码,DataOutputStream 特殊数据输出流。DataInputStream 特殊数据输入流。例如readByte();

2025-02-03 23:12:01 219

原创 字节、字符打印流

PrintStream(字节打印流)继承OutputStreamPrintWriter(字符打印流)继承writer。

2025-02-03 22:34:55 201

原创 缓冲字节流

字节缓冲流自带8KB缓冲区,可以提高原始字节流、字符流读写数据的性能。● 字节缓冲输出流:BufferedOutputStream。● 字节缓冲输入流:BufferedlnputStream。● 字符缓冲输入流:BufferedReader。● 字符缓冲输出流:BufferedWriter。

2025-02-03 14:29:09 126

原创 缓冲字符流

优势:readLine方法是目前读取文本最好的方法,因为它是一行行读取,不会遇到乱码问题。如果是用数组去装,有可能会截断文件的内容。注意:只要真正到文件末尾,readLine()方法才返回null。如果遇到换行符,那会返回一个空字符串。

2025-02-03 14:28:37 100

原创 FileReader文件字符输入流

3、创建String对象,将存储 读取到字符的容器--字符数组 转成字符串形式,然后输出。作用:以内存为基准,可以把文件中的数据以字符的形式读入到内存中去。2、创建字符数组,调用read方法,传入数组。1、创建文件字符输入流管道与源文件接通。直白点就是可以读取文本文件中的字符。

2025-02-02 22:16:40 158

原创 FileWriter文件字符输出流

fw.close();关闭包含刷新,关闭后流不能再使用。是为了通知让缓冲区尽快把缓冲区中的数据写入文本文件。因为程序要结束了,如果还没写完,那缓冲区也会随程序结束而结束。fw.flush();刷新缓冲区,将缓冲区的数据全部写出去,缓冲后,流仍可以继续使用。先会把所有数据写到内存的缓冲区,然后只io一次,再从缓冲区写到文本文件。作用:以内存为基准,把内存中的数据以字符的形式写出到文件中去。以内存为基准去写数据到文本文件,存在中间环节--缓冲区。也就是可以往文本文件中写字符 或者 写字符到文本文件中。

2025-02-02 22:16:10 283

原创 文件复制小案例

fis.read(buffer)尝试从源文件中读取最多为buffer数组的长度的字节数量,存到buffer数组中。每次调用write()方法时,它都会从文件指针当前所在的位置开始写入指定数量的字节(len)。1、先输入:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去。这样,新写入的数据就会紧跟在上次写入的数据之后,而不会覆盖它。任何文件的底层都是字节,字节流做复制,是一字不漏的转移完全部字。2、输出:以内存为基准,把内存中的数据以字节的形式写到文件中。字节流非常适合做文件的复制操作。

2025-02-02 19:21:50 249

原创 文件字节输出流,FileOutputStream

这行代码把 换行符 当成字符串,然后对字符串编码(编程字节码)。使用的是第二种write方法,写一个字节数组到文件中。1、第一种只可以写一个字节到文件中,如果你写一个汉字,运行不会报错,但是会出现汉字乱码问题。因为汉字是三个字节,但是这个方法只写了一个字节出去,截断了汉字。3、\r\n也表示换行符,这种写法的兼容性更好。\n只可以在windows系统中使用。2、第二种是可追加数据的管道。1、第一种是覆盖管道。

2025-02-02 15:52:16 237

原创 文件字节输入流

第一排全是抽象类,第二排是他们各自对应的实现类。

2025-02-02 15:09:56 183

原创 字符集的编码和解码操作

【代码】字符集的编码和解码操作。

2025-02-02 10:47:48 190

原创 递归算法和其执行流程

这个过程:不仅找出了那个f(n)的最简形式的结果,还确定了以哪头为方向。然后就可以确定f(2)的值,结束f(2)的方法,最终确定f(n-1)的值,结束f(n)方法。常见套路:给你两端其中一端的值(这里的两端是需要你去确定哪个是首,哪个是尾)和 递推公式。方法:其实只要去两头找,哪头是给条件了的。就以这头为初始点,也就是f(1)。你需要使用直接递归(也就是在方法中调用自己的方法)前一项和后一项存在递推公式。

2025-02-01 15:43:39 229

原创 File类

【代码】File类。

2025-02-01 12:10:27 103

原创 斗地主小游戏练习

【代码】斗地主小游戏练习。

2025-01-31 23:32:39 188

原创 可变参数,Collections工具类

对于 String 类型的列表,String 类已经实现了 Comparable 接口,因此可以直接调用Collections.sort(list) 而无需提供额外的比较器。注意:可以直接对自定义类型的List集合排序,但自定义类型必须实现了Comparable接口,指定了比较规则才行。● 就是一种特殊形参,定义在方法、构造器的形参列表里,格式是:数据类型 ... 参数名称;● 特点:可以不传数据给它;可以传一个或者同时传多个数据给它;也可以传一个数组给它。● 一个形参列表中可变参数只能有一个。

2025-01-31 20:58:23 296

原创 如何获取Stream流

静态方法of用两种方法重写,T是一个泛型参数(代表可以接收任何类型的参数),三个点代表它是一个可变参数,可以传一个参数或者多个参数,甚至不传参数。第二个泛型括号(<String, Integer>)表示Entry类型的具体实现,它有两个参数:String 和 Integer。第一个尖括号申明了Set集合的元素都是entry类型的对象。调用Collection集合提供的stream();

2025-01-21 20:41:07 180

原创 Map集合的三种遍历方式

但是只能有一个public修饰),Map.Entry<String, Integer> 元素包含了一个键(类型为 String)和一个值(类型为 Integer)。解决办法:调用entrySet方法,把键值对封装成一个整体对象(Map.Entry<String,double>的实现类对象,entry是一个接口)然后放进set集合里。1、调用entrySet方法,把键值对封装成一个整体对象(Map.Entry<String,double>的实现类对象,entry是一个接口)然后放进set集合里。

2025-01-21 10:30:36 1663

原创 Map集合概述

Map集合也被叫做“键值对集合”,格式:{key1=value1,key2=value2, key3=value3, ... }(key是键,value是值)HashMap:元素按照键是无序 , 不重复(判断键是否重复,是的话,后添加的覆盖先添加的,值无关紧要),无索引,值不做要求,可以重复。键值对都可以是null。Map集合的所有键是不允许重复的,但值可以重复,键和值是一一对应的,每一个键只能找到自己对应的值。值不做要求,可以重复。TreeMap:元素按照建是排序,不重复,无索引的,值不做要求。

2025-01-21 10:29:31 124

原创 TreeSet集合

/t2 == this 比较者//t1 == o 被比较者//规则1 如果你认为左边大于右边 请返回正整数//规则2 如果你认为左边小于右边 请返回负整数//规则3 如果你认为左边等于右边 请返回0//默认会升序排序@Override//标准写法//升序排序降序排序//目标:搞清楚TreeSet集合对于自定义对象的排序@Override//薪水升序});// 排序 不重复 无索引。

2025-01-14 17:33:10 406

原创 HashSet集合自定义去重复问题

因此,在方法内部你无法直接访问Student类特有的字段或方法,因为编译器只知道这是一个Object,你可以访问Object类里的方法、变量,而Object类并不包含Student类的那些特定属性(如age、name等)。为什么不仅需要位置一样还需要内容一样?如果只把由哈希值决定的位置视为唯一因素,那么这两个不同的对象就会被去重,这无疑是错误的。public boolean equals(Object o) {} 我们传入一个Student对象,但在这个方法内部,这个传入的对象被视为Object类型。

2025-01-14 00:22:58 365

原创 集合框架三 Set集合(1)Set集合的特点

Set集合功能(常用方法)基本就是Collection提供的,自己几乎没有额外的新增功能。TreeSet集合的特点:排序(默认按大小升序排序),不重复,无索引。如何证明无索引:可以去调用get方法,如果没有的话就是没索引。LinkedHashSet集合的特点:有序,不重复,无索引。不重复是指:添加数据的顺序和获取出的数据顺序不一致。因为Set集合是没有索引的,所以不需要很多功能。HashSet集合的特点:无序,不重复,无索引。Set集合的特点:无序,不重复,无索引。

2025-01-11 11:14:21 384

原创 集合框架(二)Collection的功能中(3)三种遍历方式的区别

只有迭代器可以进行遍历同时增删集合元素的行为。增强for循环和Lambda表达式只适合遍历集合,不能遍历的同时增删元素,否则会出现并发修改异常问题。原因是删掉一个数据之后,集合的的元素会自动往前移动,覆盖了删除的数据的位置。之后i++了,导致漏删数据。遍历集合的同时又存在增删集合元素的行为时可能出现业务异常,这种现象被称之为并发修改异常问题。

2025-01-09 14:32:53 246

原创 集合框架(二)Collection的功能中(2)三种遍历方式

Concumer是一个接口,<?”表示了一种未知类型,super T 指定了未知传过来类型的下界,即该传过来的未知类型必须是T本身或者T的父类。接口不能直接创建对象,所以我们可以通过使用匿名内部类的方法,先创建一个它的实现类,然后创建该实现类的对象。如果迭代器没有元素了,再调用next方法会报NoSuchElementException异常。因为它的遍历方式也使用于set和list集合。通过调用forEach方法来实现遍历。

2025-01-09 14:31:51 305

原创 集合框架(二)Collection的功能中(1)Collection的常用功能

【代码】集合框架(二)Collection的功能中(1)Collection的常用功能。

2025-01-08 18:29:26 156

原创 集合框架 (一)认识集合

有序,无序:指集合中的元素是否保持插入顺序,或者是否有特定的排序规则。例如,是指打印时候的顺序不一定按添加时候的顺序。Collection:代表单列集合,每个元素(数据)只包含一个值。Map:代表双列集合,每个元素包含两个值(键值对)。可否重复:是指集合内的元素可否重复。

2025-01-08 18:27:48 161

原创 泛型支持的类型

对于 -128 到 127 之间的整数值(这个范围可以由JVM实现调整),valueOf 方法会返回缓存中的已有对象,而不会创建新的 Integer 实例。因为泛型擦除:泛型工作在编译阶段,等编译后泛型就没用了,所以泛型在编译后都会被擦除,在编译后它们都会被替换为它们的上界(如果指定了上界),或者默认地替换为 Object 类型.因为每次创建对象,都会在堆内存中创建一个对象,所以效率低,内存占用大。就是将基本类型的数据变成相应类的类型的数据,以便可以在泛型中使用,这样泛型就可以限定基本数据类型的数据了。

2025-01-08 17:24:27 396

空空如也

空空如也

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

TA关注的人

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