
Java:单个知识点
文章平均质量分 76
这里的内容主要是一些专业知识点,内容比较分散,没有形成统一的汇总,比较零碎,如果需要看汇总一类,可以看《Java:经验总结》
大大大钢琴
别心急、做技术确实不容易;水平是在不断实践中发展和完善的!
展开
-
《知识点043:wait(),notify()线程等待与唤醒》
对象的wait方法有三个,一个是令对象等待任何线程来调用notify或者notifyAll方法来令该对象在当前线程唤醒。另外两个将当前线程置于等待状态,等到特定的时间来唤醒。wait() 让当前线程处于“等待(阻塞)状态”,“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法”,当前线程被唤醒(进入“就绪状态”)。原创 2024-08-05 19:39:54 · 857 阅读 · 0 评论 -
《知识点042:多线程实例(run, start, wait, notify, notifyAll, sleep, yield, join)》
有两个线程同时执行(没有synchronized)一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有 Sleep()方法,只有高优先级的线程执行完毕后,低优先级的线程才能够执行;run() 和start() 是大家都很熟悉的两个方法。t1接着上次休息前的进度继续执行,把shareVar的值一直加到10,由于此刻shareVar的值不为0,所以t1将输出此刻shareVar的值,然后再调用notify() 方法,由于此刻已经没有等待锁标志的线程,所以此调用语句不起任何作用。原创 2024-08-05 19:38:32 · 574 阅读 · 0 评论 -
《知识点041:Thread类run(),start()区别》
通过调用Thread类的 start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。(2)t.run();原创 2024-08-05 19:36:33 · 545 阅读 · 0 评论 -
《知识点040:HashTable排序方法(2种)》
从中可以看出HashTable继承Dictionary类,实现Map接口。其中Dictionary类是任何可将键映射到相应值的类(如 Hashtable)的抽象父类。每个键和每个值都是一个对象。在任何一个 Dictionary 对象中,每个键至多与一个值相关联。Map是"key-value键值对"接口。1. 线程安全。2. Key、Value均不能为null。3. 包含了一个Entry[]数组,而Entry又是一个链表,用来处理冲突。原创 2024-08-05 19:25:30 · 618 阅读 · 0 评论 -
《知识点039:HashTable的遍历方法(2种)》
从中可以看出HashTable继承Dictionary类,实现Map接口。其中Dictionary类是任何可将键映射到相应值的类(如 Hashtable)的抽象父类。每个键和每个值都是一个对象。在任何一个 Dictionary 对象中,每个键至多与一个值相关联。Map是"key-value键值对"接口。1. 线程安全。2. Key、Value均不能为null。3. 包含了一个Entry[]数组,而Entry又是一个链表,用来处理冲突。原创 2024-08-05 19:23:12 · 543 阅读 · 0 评论 -
《知识点038:HashTable的使用和介绍》
从中可以看出HashTable继承Dictionary类,实现Map接口。其中Dictionary类是任何可将键映射到相应值的类(如 Hashtable)的抽象父类。每个键和每个值都是一个对象。在任何一个 Dictionary 对象中,每个键至多与一个值相关联。Map是"key-value键值对"接口。1. 线程安全。2. Key、Value均不能为null。3. 包含了一个Entry[]数组,而Entry又是一个链表,用来处理冲突。原创 2024-08-05 19:20:56 · 956 阅读 · 0 评论 -
《知识点037:HashMap的key、value值排序》
HashMap是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。HashMap实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。原创 2024-08-05 19:18:33 · 1538 阅读 · 0 评论 -
《知识点036:HashMap遍历的4种方法(4种)》
HashMap是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。HashMap实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。原创 2024-08-05 19:16:49 · 1271 阅读 · 0 评论 -
《知识点035:Java中Map的get()\size() \values()\entrySet()\keySet() 》
Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List 看作是具有数值键的 Map。1. Map提供接口分别用于返回 键集、值集或键-值映射关系集。entrySet()用于返回键-值集的Set集合;keySet()用于返回键集的Set集合;values()用户返回值集的Collection集合,因为Map中不能包含重复的键;每个键最多只能映射到一个值。所以,键-值集、键集都是Set,值集时Collection。原创 2024-08-05 19:14:32 · 1277 阅读 · 0 评论 -
《知识点034:Java中Map的containsValue、containsKey、isEmpty》
Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List 看作是具有数值键的 Map。1. Map提供接口分别用于返回 键集、值集或键-值映射关系集。entrySet()用于返回键-值集的Set集合;keySet()用于返回键集的Set集合;values()用户返回值集的Collection集合,因为Map中不能包含重复的键;每个键最多只能映射到一个值。所以,键-值集、键集都是Set,值集时Collection。原创 2024-08-05 19:11:59 · 1794 阅读 · 0 评论 -
《知识点033:Java中Map添加集合-清除集合-移除集合》
Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List 看作是具有数值键的 Map。1. Map提供接口分别用于返回 键集、值集或键-值映射关系集。entrySet()用于返回键-值集的Set集合;keySet()用于返回键集的Set集合;values()用户返回值集的Collection集合,因为Map中不能包含重复的键;每个键最多只能映射到一个值。所以,键-值集、键集都是Set,值集时Collection。原创 2024-08-05 19:08:47 · 692 阅读 · 0 评论 -
《知识点032:Java中Map遍历value的方法(6种)》
Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List 看作是具有数值键的 Map。1. Map提供接口分别用于返回 键集、值集或键-值映射关系集。entrySet()用于返回键-值集的Set集合;keySet()用于返回键集的Set集合;values()用户返回值集的Collection集合,因为Map中不能包含重复的键;每个键最多只能映射到一个值。所以,键-值集、键集都是Set,值集时Collection。原创 2024-08-05 19:06:34 · 1835 阅读 · 0 评论 -
《知识点031:Java中Map遍历key的方法(4种)》
Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List 看作是具有数值键的 Map。1. Map提供接口分别用于返回 键集、值集或键-值映射关系集。entrySet()用于返回键-值集的Set集合;keySet()用于返回键集的Set集合;values()用户返回值集的Collection集合,因为Map中不能包含重复的键;每个键最多只能映射到一个值。所以,键-值集、键集都是Set,值集时Collection。原创 2024-08-05 19:03:51 · 1558 阅读 · 0 评论 -
《知识点030:Java中Map遍历的方法(3种)》
Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List 看作是具有数值键的 Map。1. Map提供接口分别用于返回 键集、值集或键-值映射关系集。entrySet()用于返回键-值集的Set集合;keySet()用于返回键集的Set集合;values()用户返回值集的Collection集合,因为Map中不能包含重复的键;每个键最多只能映射到一个值。所以,键-值集、键集都是Set,值集时Collection。原创 2024-08-05 19:02:06 · 852 阅读 · 0 评论 -
《知识点029:Java中HashSet去重方法(4种)》
HashSet使用的是相当复杂的方式来存储元素的,使用HashSet能够最快的获取集合中的元素,效率非常高(以空间换时间)。它会根据hashcode和equals来庞端是否是同一个对象,如果hashcode一样,并且equals返回true,则是同一个对象,不能重复存放。(1)HashSet是Set接口的实现。HashSet按Hash算法来存储集合中的元素,具有很好的存取和查找性能。(2)HashSet不是同步的,多个线程访问是需要通过代码保证同步(3)HashSet集合元素值可以使null。原创 2024-08-04 17:33:04 · 1147 阅读 · 0 评论 -
《知识点027:Java中HashSet的遍历方法(2种)》
HashSet使用的是相当复杂的方式来存储元素的,使用HashSet能够最快的获取集合中的元素,效率非常高(以空间换时间)。它会根据hashcode和equals来庞端是否是同一个对象,如果hashcode一样,并且equals返回true,则是同一个对象,不能重复存放。(1)HashSet是Set接口的实现。HashSet按Hash算法来存储集合中的元素,具有很好的存取和查找性能。(2)HashSet不是同步的,多个线程访问是需要通过代码保证同步(3)HashSet集合元素值可以使null。原创 2024-08-04 17:31:08 · 1161 阅读 · 0 评论 -
《知识点026:Java中set类的Set转List的方法(2种)》
Java 代码创建了一个 HashMap 对象,并向其中添加了三个键值对:这意味着可以通过键来获取对应的值。HashMap 是 Java 中的一种集合,它通过键-值对的形式存储数据,并提供了快速的查找功能。将一个Set转换为一个ArrayList,并通过循环遍历ArrayList中的元素,并将其打印出来。方法将Set中的元素添加到该ArrayList中。然后使用增强型for循环遍历。创建了一个新的ArrayList对象。中的元素,并将它们打印出来。原创 2024-08-01 10:39:22 · 918 阅读 · 0 评论 -
《知识点019:Java中set类的遍历和排序(2种)》
在Java中,Set是一种集合,通常用于存储不重复的元素。要遍历Set集合,可以使用迭代器(Iterator)或者增强型for循环(foreach循环)Set中TreeSet 本身就是有序的元素,那么下面重点介绍下HashSet的2种排序方法。推荐用for循环进行Set的遍历。原创 2024-08-01 10:33:57 · 433 阅读 · 0 评论 -
《知识点024:Java的LinkedList类clear()和add()的使用》
LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.,它和ArrayList一样实现了List接口,但是她执行插入和删除操作时比ArrayList更加高效,因为她是基于链表的,但同时也决定了她在随机访问方面要比ArrayList弱一点。原创 2024-07-31 14:27:38 · 1061 阅读 · 0 评论 -
《知识点023:Java中LinkedList.remove()删除数据》
LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.,它和ArrayList一样实现了List接口,但是她执行插入和删除操作时比ArrayList更加高效,因为她是基于链表的,但同时也决定了她在随机访问方面要比ArrayList弱一点。原创 2024-07-31 14:25:28 · 975 阅读 · 0 评论 -
《知识点022:Java中LinkedList.get()获取元素》
LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.,它和ArrayList一样实现了List接口,但是她执行插入和删除操作时比ArrayList更加高效,因为她是基于链表的,但同时也决定了她在随机访问方面要比ArrayList弱一点。原创 2024-07-31 14:23:32 · 459 阅读 · 0 评论 -
《知识点021:Java中LinkedList排序(2种))》
LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.,它和ArrayList一样实现了List接口,但是她执行插入和删除操作时比ArrayList更加高效,因为她是基于链表的,但同时也决定了她在随机访问方面要比ArrayList弱一点。原创 2024-07-31 14:20:29 · 541 阅读 · 0 评论 -
《知识点020:Java中LinkedList遍历(7种)》
LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.,它和ArrayList一样实现了List接口,但是她执行插入和删除操作时比ArrayList更加高效,因为她是基于链表的,但同时也决定了她在随机访问方面要比ArrayList弱一点。原创 2024-07-31 14:18:04 · 889 阅读 · 0 评论 -
《知识点019:Java中ArrayList排序的方法(3种)》
ArrayList是一个基于数组上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。(1)ArrayList依赖于数组实现的,初始长度为10的Object[],并且可随需要而增加的动态数组当元素超过10,那么ArrayList底层会新生成一个数组,长度为原来的1.5倍+1,然后将原数组内容复制到新数组中,并且后续增加的内容会放到新数组中,当新数组无法容纳增加的元素,重复该过程。原创 2024-07-31 14:07:23 · 2329 阅读 · 0 评论 -
《知识点018:Java中ArrayList合并并删除重复数据(3种)》
(1)ArrayList依赖于数组实现的,初始长度为10的Object[],并且可随需要而增加的动态数组当元素超过10,那么ArrayList底层会新生成一个数组,长度为原来的1.5倍+1,然后将原数组内容复制到新数组中,并且后续增加的内容会放到新数组中,当新数组无法容纳增加的元素,重复该过程。(2)ArrayList对随机访问性能很好,但进行大量插入,删除操作,性能很差,因为操作之后后续元素需要移动。原创 2024-07-31 14:04:32 · 423 阅读 · 0 评论 -
《知识点017:ArrayList删除特定不同元素(2种)》
在代码中,删除元素后,需要把下标减一。这是因为在每次删除元素后,ArrayList会将后面部分的元素依次往上挪一个位置(就是copy),所以,下一个需要访问的下标还是当前下标,所以必须得减一才能把所有元素都遍历完。两种方案实现原理都差多的,性能也差别不大,第二种只是jdk封装了下。原创 2024-07-30 09:46:12 · 520 阅读 · 0 评论 -
《知识点016:ArrayList遍历方法(3种)》
1、方式1,3看着比较简洁,但是性能较差,这种方式在循环的过程中,会进行数据锁定,性能较差。2、第二种方式,循环过程中数据不锁定,效率高,但是多线程的时候需要考虑并发操作的问题.3、第一种方式比第三钟方式还要多一些处理,所以时间更久。因此推荐用第二种。原创 2024-07-30 09:43:59 · 357 阅读 · 0 评论 -
《知识点015:wait(),notify()线程等待与唤醒》
对象的wait方法有三个,一个是令对象等待任何线程来调用notify或者notifyAll方法来令该对象在当前线程唤醒。另外两个将当前线程置于等待状态,等到特定的时间来唤醒。wait() 让当前线程处于“等待(阻塞)状态”,“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法”,当前线程被唤醒(进入“就绪状态”)。原创 2024-07-29 18:28:02 · 1471 阅读 · 0 评论 -
《知识点014:多线程实例(run, start, wait, notify, notifyAll, sleep, yield, join)》
有两个线程同时执行(没有synchronized)一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有 Sleep()方法,只有高优先级的线程执行完毕后,低优先级的线程才能够执行;run() 和start() 是大家都很熟悉的两个方法。t1接着上次休息前的进度继续执行,把shareVar的值一直加到10,由于此刻shareVar的值不为0,所以t1将输出此刻shareVar的值,然后再调用notify() 方法,由于此刻已经没有等待锁标志的线程,所以此调用语句不起任何作用。原创 2024-07-29 18:23:54 · 911 阅读 · 0 评论 -
《知识点013:synchronized关键字原理和用法》
1. 无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。2. 每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的那段代码。3. 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。原创 2024-07-29 18:20:49 · 929 阅读 · 0 评论 -
《知识点012:Thread类run(),start()区别》
Java Thread中调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。原创 2024-07-29 18:18:15 · 388 阅读 · 0 评论 -
《知识点011:Java实现开多线程(2种方式)》
(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。采用实现Runnable接口方式:(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。原创 2024-07-29 18:16:12 · 721 阅读 · 0 评论 -
《知识点010:Java的多线程介绍》
多线程是Java中不可避免的一个重要主体。从本章开始,我们将展开对多线程的学习。接下来的内容是对Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(), notify()等接口;Thread类中的接口;synchronized关键字。在进入后面章节的学习之前,先对了解一些多线程的相关概念。原创 2024-07-29 18:12:07 · 437 阅读 · 0 评论 -
《知识点009:Java使用Runnable接口实现多线程方法》
Runnable run() 方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待 run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。1.定义一个任务类实现Runnable接口,实现Runnable接口中的run()方法(run()方法告知系统线程该如何运行),run()方法中定义具体的任务代码或处理逻辑。它会导致任务的run()方法被执行,当run()方法执行完毕,则线程就终止。原创 2024-07-29 18:07:16 · 338 阅读 · 0 评论 -
《知识点008:Java使用Thread类实现多线程方法》
通过调用Thread类的 start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。1.首先创建一个任务类extends Thread类,因为Thread类实现了Runnable接口,所以自定义的任务类也实现了Runnable接口,重新run()方法,其中定义具体的任务代码或处理逻辑。3.调用自定义对象的start()方法,启动一个线程。原创 2024-07-29 18:05:33 · 456 阅读 · 0 评论 -
《知识点007:Java使用Thread的sleep(),wait()区别详解》
1. sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。2. 调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备。原创 2024-07-28 00:16:36 · 821 阅读 · 0 评论 -
《知识点006:Java使用Thread的synchronized同步锁》
run()方法中存在“synchronized(this)代码块”,而且t1和t2都是基于"demo这个Runnable对象"创建的线程。这就意味着,我们可以将synchronized(this)中的this看作是“demo这个Runnable对象”;因此,线程t1和t2共享“demo对象的同步锁”。所以,当一个线程运行的时候,另外一个线程必须等待“运行线程”释放“demo的同步锁”之后才能运行。原创 2024-07-28 00:09:05 · 466 阅读 · 0 评论 -
《知识点005:Java使用Thread.interrupt 用法》
Thread.interrupt()方法用于中断一个线程,但它的行为取决于线程当前的状态。具体来说,Thread.interrupt()方法的行为可以分为两种情况:当线程处于运行状态(RUNNING)或可运行状态(RUNNABLE)时,调用interrupt()方法只是会设置线程的中断标志位,没有任何其他作用。这意味着,如果线程正在执行一个循环或其他长时间运行的任务,并且没有定期检查中断标志位,那么即使调用了interrupt()方法,线程也不会立即停止执行。原创 2024-07-27 23:59:00 · 792 阅读 · 0 评论 -
《知识点004:Java使用Thread.interrupt() 中断线程》
2. 如果本线程是处于阻塞状态:调用线程的wait(), wait(long)或wait(long, int)会让它进入等待(阻塞)状态,或者调用线程的join(), join(long), join(long, int), sleep(long), sleep(long, int)也会让它进入阻塞状态。1、thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序本身。原创 2024-07-27 23:54:27 · 483 阅读 · 0 评论 -
《知识点003:Java使用Thread.currentThread()获取当前线程》
1. Thread提供静态方法currentThread()来供我们调用,既可以避免this无法获取到main线程的问题,又可以避免this无法获取到Thread t2=new Thread(Thread t)来开启的线程的问题,可以说currentThread方法可以在所有场合获取到正确的当前线程。通过这个方法,可以获取当前线程的各种属性,如线程名称、优先级、是否为守护线程等,并且可以对这些属性进行修改。当调用此方法时,当前线程的中断状态会被设置,如果线程处于阻塞状态(如调用。原创 2024-07-27 23:50:11 · 444 阅读 · 0 评论