自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

The_king的博客

每天学点java干货

  • 博客(12)
  • 收藏
  • 关注

原创 深入理解PriorityQueue

认识PriorityQueue 一个基于优先级的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。该队列不允许使用 null 元素也不允许插入不可比较的对象(没有实现Comparable接口的对象)。PriorityQueue 队列的头是:指排序规则最小那个元素。如果多个元素都是最小值则随机选一个。PriorityQueue 是一个无界队列,但是初始的容量(实际是一个Object[]),随着不断向优先级队列添

2020-08-05 13:24:54 179

原创 深入理解LinkedList

1,简介LinkedList是双向链表实现的ListLinkedList是非线程安全的LinkedList元素允许为null,允许重复元素LinkedList是基于链表实现的,因此插入删除效率高,查找效率低(虽然有一个加速动作)LinkedList是基于链表实现的,因此不存在容量不足的问题,所以没有扩容的方法LinkedList还实现了栈和队列的操作方法,因此也可以作为栈、队列和双端队列来使用2,类图关系3,走进源码package java.util;import java.ut

2020-08-03 22:04:54 186

原创 深入理解LinkedHashSet

1,特性LinkedTreeSet底层数据结构是链表和哈希表,元素有序且唯一,链表保证元素有序,哈希表保证元素唯一 线程不安全,效率高。2,类图关系3,源码package java.util;public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable { private static fina

2020-08-03 14:14:29 785

原创 深入理解TreeSet

1,认识TreeSetTreeSet 实现了NavigableSet接口,意味着它支持一系列的导航方法。比如查找与指定目标最匹配项保存无重复的数据,并且对数据进行了排序TreeSet是基于TreeMap的NavigableSet实现底层是基于红黑树实现的线程不安全2,类图关系3,走进源码数据结构//底图 private transient NavigableMap<E,Object> m; //虚拟对象 private static final Object P

2020-08-03 13:46:15 120

原创 深入理解HashSet

1,认识HashSet底层实现原理:使用哈希表来支持HashSet特点:1.不允许存储重复的元素2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历3.是一个无序的集合,存储元素和取出元素的顺序有可能不一直4.底层是一个哈希表结构(查询的速度非常的快)2,类图关系3,走进源码数据结构 private transient HashMap<E,Object> map; //虚拟值与后勤图中的对象相关联(虚拟对象,作为value放到map中) private s

2020-07-31 21:16:12 205 1

原创 深入理解LinkedList

1,认识LinkedListLinkedList是基于双链表实现的,具有双链表特性LinkedList内部封装的是双向链表数据结构,每个节点是一个Node对象。Node对象中封装的是要被添加的元素,还有一个指向上一个Node对象的引用和 指向下一个Node对象的引用 , 与ArrayList容器相比,不同的容器有不同的数据结构,不同的数据结构操作起来性能不同。链表数据结构,做插入删除的效率比较高,但查询效率比较低 。 而数组结构(线性)做查询时效率高,可以直接通过下标来直接找到元素,但插入和删除效

2020-07-31 13:26:42 148

原创 深入理解ArrayLIst

1,概念ArrayList是一个其容量能够动态增长的动态数组,但和数组会有点不一样。下面细说特性:将会在下面的源码片段中发现,没有一个代码片段使用synchronized关键字因此,ArrayList是线程不安全的,建议在单线程中使用2,类关系图3,走进源码数据结构//默认容量private static final int DEFAULT_CAPACITY = 10;//默认存储区transient Object[] elementData//数组长度private int

2020-07-29 15:45:22 141

原创 深入理解Stack

1,特性顾名思义,Stack,具有一般栈的特性,先进后出,后进先出继承于Vector,具有线程安全2,继承关系Stack直接继承Vector,因此,Vector有的特性,Stack也有3,走进源码原理:基于数组存取数据结构 //存储数据区域 protected Object[] elementData; //集合大小记录器 protected int elementCount;3.1 构造函数只有一个空的构造函数 public Stack() { }3.

2020-07-29 13:38:34 311

原创 深入理解Vector

Vector原理:基于数组//元素存储区protected Object[] elementData;//Vector 集合大小protected int elementCount;为什么说Vector会有是线程安全的?从下面的构造方法还有增删改查的操作可以看见,都有这么一个synchronized关键字,就是这个关键字为Vector容器提供了一个安全机制,保证了线程安全。Vector类图关系:RandomAccess 支持可随机访问元素Cloneable 支持可克隆

2020-07-28 16:24:07 318

原创 浅谈java内存模型

1,什么是jmm?jmm定义了一个线程对另一个线程的可见性jmm决定一个线程对共享变量的写入时,能对另一个线程可见2,jmm解决了什么问题?在多线程编程中,每个线程都有自己的内存(称为本地内存),共享变量存放在主内存中,当有多个线程同时操作一个变量时,可能因为线程没有及时刷新本地内存的数据到主内存,会有线程安全问题jmm通过控制主内存和每个线程本地内存的交互,来为java程序员提供内存可见性保证3, 什么时候刷新本地内存的数据到主内存?什么时候最新的值会被刷新至主内存中是不太确定的。但是有两种

2020-07-14 23:21:12 108

原创 java的wait()/notify(),notifyAll()注意事项

1,使用注意事项(1)三者的使用必须使用synchronized同步块,否则会报“java.lang.IllegalMonitorStateException”异常(2)当线程A调用wait()方法后,在下一个时间点上线程A被唤醒了,会在wait()的下一行开始继续执行代码2,原因(1)必须使用同步块的原因是,wait()涉及到锁得释放,nofity()唤醒等待该锁,都是涉及到锁的相关操作,因此,如果没有加上sycronized同步,就没有锁,就会报异常。3,实验(1)wait()/notify

2020-07-07 23:04:00 234

原创 Java多线程学习记录

1, 线程是什么?线程是进程的一个实体,是cpu分派调度的基本单位,同一个进程中可以存在多个线程并发执行2, 什么是守护线程?Java中有两种线程,一种是用户线程,另一种是守护线程。用户线程是指用户自定义创建的线程,主线程停止,用户线程不会停止守护线程当进程不存在或主线程停止,守护线程也会被停止// 设定 daemonThread 为 守护线程,default false(非守护线程)daemonThread.setDaemon(true);3, 多线程3大特性原子性、可见性、有序性1,

2020-07-07 15:39:44 139

空空如也

空空如也

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

TA关注的人

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