
Java集合
文章平均质量分 64
Java语言基础学习
ChirsPaul3
这个作者很懒,什么都没留下…
展开
-
BlockingQueue
BlockingQueueBlockingQueue接口继承自Queue接口,在Queue的基础上增加了等待操作,简单来说就是获取元素时队列如果是空的,等待,插入元素时,队列已经满了,等待。public interface BlockingQueue<E> extends Queue<E> { boolean add(E e); boolean offer(E e); void put(E e) throws InterruptedException原创 2021-05-28 19:28:42 · 235 阅读 · 0 评论 -
DelayQueue源码分析
DelayQueueDelayQueue是一个无界的阻塞队列,它的元素实现了Delayed接口,并且元素只有在delay到期以后才能取出。队列头是延迟过期时间最长的元素,如果没有元素过期,执行poll()方法返回null。案例首先定义一个实现Delayed接口的泛型类MyDelayNode,Delayed接口继承了Comparable接口。public class MyDelayNode<T> implements Delayed { private int delay; /原创 2021-05-28 19:25:33 · 309 阅读 · 0 评论 -
LinkedBlockingQueue源码分析
LinkedBlockingQueue基于单向链表的可选有界队列先来看一下定义的字段。//单向链表节点的静态内部类static class Node<E> { E item; Node<E> next; Node(E x) { item = x; }}/** The capacity bound, or Integer.MAX_VALUE if none */private final int capacity;/** Current原创 2021-05-28 19:24:00 · 227 阅读 · 0 评论 -
ArrayBlockingQueue源码分析
ArrayBlockingQueueArrayBlockingQueue基于数组原理实现的,有界的,一旦创建边界是不能改变的。可以使用公平的策略在等待的消费者和生产者中。源码先来看类中定义的几个字段/** The queued items */final Object[] items;/** items index for next take, poll, peek or remove */int takeIndex;/** items index for next put, offer原创 2021-05-28 19:22:38 · 143 阅读 · 0 评论 -
Queue接口
QueueQueue是队列接口,它的主要特点是先进先出,就是排队嘛。Queue接口有两个重要的子接口Deque和BlockingQueue,这里只介绍Queue接口的直接是实现,Deque和BlockingQueue接口的实现单独介绍。public interface Queue<E> extends Collection<E> { boolean add(E e); boolean offer(E e); E remove(); E p原创 2021-05-24 08:08:01 · 214 阅读 · 0 评论 -
PriorityQueue源码分析
PriorityQueue从名字上来看,PriorityQueue叫做优先队列,它的另一个名字叫堆(heap),这个名字更熟悉。它和普通的队列不太一样,它里面存储的元素具有一定的顺序性,而不是简单的“先进先出”。它的实现原理通常是二叉堆,二叉堆是一个完全填满的二叉树。这里不做过多的介绍,都是数据结构的知识。来介绍一下优先队列的通常实现。优先队列的整体结构虽然是一个二叉堆,也是树结构,但是存储元素的却是用数组实现的,不是通常用链表作为树的节点。因为这里隐含着一个规律,用数组的索引可以很轻松的获取它的父节点原创 2021-05-24 08:03:06 · 238 阅读 · 0 评论 -
LinkedHashMap原理分析
LinkedHashMap原理分析LinkedHashMap被称作“有序的Map”,作为对比HashMap被称作“无序的”。这里说的“有序”,“无序”到底什么意思?怎样实现的,来研究一下。案例在学习源码之前,先来看两个小测试案例。@Testpublic void testHashMap() { Map<String, String> map = new HashMap<>(); map.put("caocao", "孟德"); map.put(原创 2021-05-19 19:22:02 · 212 阅读 · 0 评论 -
HashMap源码分析
HashMapHashMap时实现Map接口的Hash表,是Java语言中最常用的集合类之一,再数据结构中叫做“散列表”。我们集合散列表实现原理以及Java的HashMap源码来仔细分析一下。散列表在数据结构中散列表有几种实现方法,在介绍实现方法之前先来说一下散列函数。散列表数据结构就是包含键值对的固定大小的数组。每一个键被映射到数组的一个位置。字符串(键)与数组索引的对应关系就是散列函数。散列函数演做到尽量的平均分散,尽量保证键值均匀的分布在数组中。但是可以想象,需要对应的键数量超过数组长度是,肯原创 2021-05-14 09:08:54 · 165 阅读 · 0 评论 -
ArrayList,LinkedList,Vector,CopyOnWriteArrayList对比
ArrayList,LinkedList,Vector,CopyOnWriteArrayList对比ArrayList,LinkedList,Vector,CopyOnWriteArrayList都是List接口的实现类,List接口是有序集合,可以精确的控制在那个位置插入元素,可以通过索引位置访问元素。但是这几实现类的实现原理完全不同,分别介绍一下。ArrayListLinkedListVectorCopyOnWriteArrayList结论ArrayList,LinkedList,Ve原创 2021-05-11 14:04:19 · 220 阅读 · 0 评论 -
CopyOnWriteArrayList源码分析
CopyOnWriteArrayList源码分析特性底层采用数组存储元素线程安全源码查看一下关键的源码实现逻辑。/** The lock protecting all mutators */final transient ReentrantLock lock = new ReentrantLock();/** The array, accessed only via getArray/setArray. */private transient volatile Object[] ar原创 2021-05-11 13:57:04 · 159 阅读 · 0 评论 -
Vector源码分析
Vector特性Vector集合也实现了List接口,是一个古老的集合类,现在用的比较少,他与ArrayList唯一的区别在于,他线程安全,看源码知道他的大部分方法添加了synchronized修饰。所以保证了线程安全,也同时导致了性能比较差,我们再使用线程安全的List集合时,现在一般使用CopyOnWriteArrayList。源码基本与ArrayList一致,ArrayList源码分析这里我只看一个方法,对于集合的get方法来说,是允许多线程并发访问的,但是这里同样添加了synchronize原创 2021-05-10 18:56:08 · 127 阅读 · 0 评论 -
LinkedList源码分析
LinkedList双向链表实现的List和Queue接口,允许插入null。特性双向链表机制实现了List和Deque接口的集合允许元素为null所有特性都是基于链表的,增删快,查找慢线程不安全源码分析内部定义了一个存储数据元素的双向节点数据结构,这是一个内部类。private static class Node<E> { E item; Node<E> next; //后一个节点指针 Node<E> prev; //前原创 2021-05-10 18:52:23 · 136 阅读 · 0 评论 -
ArrayList源码分析
ArrayList可扩容数组原理的List实现类,实现类所有的List接口方法,并且允许插入null。Java语言中最常用的集合类。源码分析ArrayList元素实际上保存在一个名字为elementData的Objec类型的数组内无参构造器实例化时,elementData为{},默认的容量为10第一次添加元素时,会先扩容public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount原创 2021-05-10 18:47:25 · 154 阅读 · 2 评论 -
String,StringBuilder,StringBuffer区别
String,StringBuilder,StringBuffer区别1.练习public static void main(String[] args) { String str1 = "xxxx"; //1 String str2 = "xxxx"; String str3 = new String("xxxx"); //3 String str4 = "" + st原创 2021-03-10 14:21:28 · 115 阅读 · 0 评论