- 博客(97)
- 收藏
- 关注
原创 java集合之LinkedTransferQueue
LinkedTransferQueue是一个无界的阻塞队列,底层采用链表结构存储数据,遵循先进先出,但是它不采用加锁的方式来控制并发,而是采用cas和各种判断,来保证多线程的操作,它与SynchronousQueue一样,不存储元素,而是存储生产者或者消费者本身,也就是线程本身生产者和消费者直接交换手中的数据,任何一个写操作必须等到一个读操作(反之亦然),交换成功才是成功,否则就阻塞或者返回失败(取决于调用的方法),队列中的元素必须是同一类角色,要么是生产者,要么是消费者。
2024-10-21 21:39:20 198
原创 java集合之DelayedWorkQueue
DelayedWorkQueue 是一个定制的阻塞队列,专门用来存放RunnableScheduledFutures任务,它是有界的,有最大容量,一般达不到,虽然它是队列,它并不能满足先进先出规则,它是按优先级出队,它会将插入的数据进行排序,按优先级出队,底层采用数组实现的二叉堆,它是为定时线程池服务的,它会根据提交进来的任务的延迟时间进行排序,始终将距离当前时间最近的任务排在前面。具体情况,我们根据源码来解释。
2024-10-08 22:49:01 148
原创 java集合之SynchronousQueue
SynchronousQueue也是一个队列,与其他队列不同的是,SynchronousQueue队列中,他不存储数据,存储生产者或者是消费者,让生产者和消费者直接交换手中的数据,任何一个写操作必须等到一个读操作(反之亦然),交换成功才是成功,否则就阻塞或者返回失败(取决于调用的方法)。
2024-09-17 15:50:07 276
原创 java集合之DelayQueue
DelayQueue是一个无界的阻塞队列,是一个延时队列,它存储的元素必须实现Delayed接口,其中的元素只有在到期时才能被消费者取走,它底层是使用的PriorityQueue,PriorityQueue底层采用数组实现的二叉堆,队列中的元素根据到期时间进行排序,剩余时间最少的放在堆顶。因为它几乎趋近于无界,因为底层数组的最大容量限制是Int最大值减8,所以生产者往队列添加元素的时候不会出现阻塞的情况,队列满了就进行扩容消费者会阻塞。
2024-08-02 07:33:18 390
原创 java集合之PriorityBlockingQueue
PriorityBlockingQueue是一个阻塞队列,它是有界的,有最大容量,一般达不到,虽然它是队列,它并不能满足先进先出规则,它是按优先级出队,它会将插入的数据进行排序,按优先级出队,底层采用数组实现的二叉堆,所以当我们往队列中添加自定义对象时,自定义对象需要实现Comparable接口,也就是需要告诉队列,你的数据需要按什么规则进行排序。具体情况,我们根据源码来解释。
2024-07-28 16:05:05 334
原创 java集合之LinkedBlockingQueue
1、LinkedBlockingQueue属于Queue分支下的一个子类,与ArrayBlockingQueue不同,它底层采用链表的方式来存放数据,不过也可以给它设置容量,若不设置容量,默认是int的最大值,正常来说元素个数是达不到这个值的,可能先出现oom2、由于底层采用的是单链表,只能从尾部添加,从头部获取。
2024-07-23 21:51:02 360
原创 java集合之ArrayBlockingQueue
ArrayBlockingQueue属于BlockingQueue分支下的一个子类,他是一个阻塞队列,通过名字可知,它底层是采用的数组结构来存放数据,既然是数组,那么长度就是固定的,且它是一个阻塞队列,那么就会涉及到一些锁相关的内容,我们从具体的方法中去了解具体的实现。
2024-07-21 22:05:41 354
原创 java集合之BlockingQueue
什么是阻塞队列,首先它是一个队列(或者说集合),它是用来存放数据的,为什么说阻塞,当多个线程往队列里面放数据或取数据的时候,如果没有先来后到,乱取乱放,数据就脏了,所以我们需要协调多个线程之间的取和放,BlockingQueue就是实现了协调多线程功能的一个队列,使用者不再关心什么时候线程该阻塞,什么时候线程该唤醒,BlockingQueue已经包办这一切。BlockingQueue是concurrent中的阻塞队列,为多线程传输数据提供了方便,使用者不需要去实现线程之间的协调。
2024-04-29 21:58:49 156 1
原创 java集合之Deque
Deque是一个线性集合,是集合框架中的queue下的一个分支,它支持在队列两端进行操作,所以也叫双端队列,大多数Deque实现对它们可能包含的元素的数量没有固定的限制,但是这个接口支持容量限制。在不违反容量限制的情况下将一个元素推到该队列表示的堆栈上(换句话说,在队列的头),如果当前没有可用空间,则抛出异常。在不违反容量限制的情况下将指定的元素插入队列的尾部,成功时返回true,如果当前没有可用的空间,则返回false。在队列尾部插入指定的元素,如果当前没有可用空间,则抛出异常。
2024-04-24 07:39:17 388
原创 java集合之Queue
Queue是java集合中的一个分支叫队列,队列从操作上来讲可以分为单向队列和双端队列(Deque下的实现类),单向队列只能单向操作,比如只能从尾部添加元素,头部获取元素,双向队列就比较灵活,既可以从头部添加,头部获取,也可以从尾部添加,尾部获取,除此外Queue也分为阻塞队列以及非阻塞队列,阻塞队列一般用于多线程模式下。在不违反容量限制的情况下插入指定的元素,成功时返回true,如果当前没有可用的空间,则抛出一个非法的状态异常。检索但不删除此队列的头,如果此队列为空,则返回null。
2024-04-19 07:31:45 242
原创 java集合之LinkedList
LinkedList实现了List和Deque,说明它既有List的特性,也有Deque的特性,它既然是一个容器,那么自然就是用来存放数据的,它与ArrayList又有什么区别呢,容量是多少,底层用什么结构来存放数据,有没有扩容等等,下面我们带着问题来看看。
2024-02-21 21:36:58 272
原创 java集合之ArrayList
前面说了接口抽象类,终于走到了具体的实现类了,ArrayList,听名字带了array,那么它大概跟数组有点什么关系。那么数组有什么特点,概括来说:查找快,增删慢。
2024-01-04 23:02:07 405
原创 java集合之List
返回此列表中指定元素最后一次出现时的索引,如果此列表中不包含该元素,则返回-1。返回此列表中指定元素首次出现时的索引,如果此列表中不包含该元素,则返回-1。在此列表中的元素上返回一个列表迭代器,从列表中的指定位置开始。从当前集合中截取指定位置的元素,作为新的集合返回。对此列表中的元素返回一个列表迭代器。在集合中指定位置插入所有元素。在集合中指定位置插入元素。
2024-01-01 22:32:51 364
原创 java集合之Collection
比较o与当前集合是否相等,当然我们对集合进行比较,想必都是想判断集合当中的元素是否相等,因为比较两个集合的地址是否相等一般情况下没有什么意义,所以集合下的子类会对equals进行重写,对元素进行比较,比如:AbstractList对equals进行了重写。将指定集合中的元素添加到此集合(就是将一个集合中的所有元素添加的另一个集合中)当前集合是否包含另一个集合中的所有元素,包含则返回true,否则返回false。从此集合中删除另一个集合中的元素,成功返回true,否则返回false。返回集合中的元素个数。
2023-12-19 22:24:19 321
原创 java集合概览
java集合分为两大阵营,一类是Collection, 另外一类是Map,我分别将两大阵营下常用的类,以及他们的集成和实现关系表示如下:
2023-12-19 20:35:41 488
原创 先、中、后序遍历二叉树
/** * 先、中、后序遍历二叉树 */public class Code03 { public static class TreeNode{ private Integer val; private TreeNode left; private TreeNode right; public TreeNode(Integer val) { this.val = val; } }.
2021-11-07 09:28:33 128
原创 合并两个有序列表
public class Code07 { public static class Node<V> { public V value; public Node<V> last; public Node<V> next; public Node() { } public Node(V v) { value = v; last
2021-11-07 08:46:00 150
原创 两个链表相加
啥意思:计算加法:比如:9->9->9->9 + 1->9->7 = 0->9->7->0->1精髓:就是抠好链表的长度,找出谁是长链表,因为长链表肯定得留到最后/** * 两个链表相加 */public class Code06 { public static class Node<V> { public V value; public Node<V> last;
2021-11-07 08:44:20 122
原创 K个节点的组内逆序调整
题意:啥意思,一听就懵,那么是这样的,给你一个链表,再给你一个整数,你就在这条链表上面数,数到k个节点,就把这几个节点反转 比如:链表:1->2->3->5->7->8->4->98 k=3调整后:3->2->1->8->7->5->4->98/** * K个节点的组内逆序调整 */public class Code05 { public static class Node<V> {
2021-11-07 08:30:48 134
原创 用双链表模仿双端队列
知己知彼,百战不殆,那么双端队列的特色是啥:(1)头部添加,头部取 (2)尾部添加,尾部取 (3)头部添加,尾部取 (4)尾部添加,头部取 总之就是想怎么加就怎么加,想怎么取就怎么取/** * 用双链表双端队列 */public class Code04 { public static class Node<V> { public V value; public Node<V> last; public Node
2021-11-07 08:20:36 88
原创 单链表模仿队列
知己知彼,百战不殆,队列有啥特色:先进先出写的糙,多担待/** * 用链表模仿队列 */public class Code03 { public static class Node{ private Integer value; private Node next; public Node(Integer value) { this.value = value; } public
2021-11-07 08:12:55 84
原创 单链表模仿栈
首先要明白栈有什么特色,毕竟知己知彼,百战不殆,那么栈有什么特色呢:先进后出/** * 用链表模仿栈 */public class Code02 { public static class Node{ private Integer value; private Node next; public Node(Integer value) { this.value = value; }
2021-11-07 08:10:15 90
原创 单链表、双链表的反转
/** * 单链表和双链表反转 * 链表反转的精髓:在反转节点之前,记下当前节点的前后节点 */public class Code01 { //单链表节点类 public static class Node{ private Integer value; private Node next; public Node(Integer value) { this.value = value; }
2021-11-07 08:07:54 83
原创 mybatis基础之三->mybatis框架整合及逆向工厂
1、三大框架整合 在老期的项目中,一般都是使用ssm项目做开发的,虽然现在的主流开发是springboot来做开发,但是ssm的基本整合还是需要掌握的。1、导入pom文件1、导入spring的pom依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSche
2021-09-24 14:30:54 80
原创 mybatis基础之二->Mybatis SQL映射文件详解
在之前我们学习了mybatis的全局配置文件,下面我们开始学习mybatis的映射文件,在映射文件中,可以编写以下的顶级元素标签:cache – 该命名空间的缓存配置。cache-ref – 引用其它命名空间的缓存配置。resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。parameterMap – 老式风格的参数映射。此元素已被废弃,并可能在将来被移除!请使用行内参数映射。文档中不会介绍此元素。sql – 可被其它语句引用的可重用语句块。insert – 映射插
2021-09-24 14:30:40 246
原创 leetcode->1
题目描述题目地址:https://leetcode-cn.com/problems/two-sum/给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + n
2021-09-24 14:30:21 66
原创 mybatis基础之一->Mybatis的介绍和基本使用
1、数据库操作框架的历程(1) JDBC JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序优点:运行期:快捷、高效缺点:编辑期:代码量大、繁琐异常处理、不支持数据库跨平台(2) DBUtils DBUtils是Java编程中的数据库操作实
2021-09-24 14:30:09 94
原创 SpringMVC基础之三->SpringMVC的使用
1、SpringMVC的返回JSON数据 到目前为止我们编写的所有Controller的方法的返回值都是String类型,但是大家应该都知道,我们有时候数据传递特别是在ajax中,我们返回的数据经常需要使用json,那么如何来保证返回的数据的是json格式呢?使用@ResponseBody注解pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0
2021-09-24 14:29:34 108
原创 SpringMVC基础之二->SpringMVC的使用
(1)SpringMVC的请求处理1、SpringMVC对请求参数的处理 在之前的servlet中我们可以通过request.getParameter()来获取请求中的参数,但是在我们编写的SpringMVC的应用程序中,在具体请求的方法中并不包含request参数,那么我们应该如何获取请求中的参数呢? 需要使用以下几个注解: @RequestParam:获取请求的参数 @RequestHeader:获取请求头信息 @CookieValue:获取cookie中的值@Requ
2021-09-24 14:29:10 112
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人