自定义博客皮肤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 184

原创 深入理解LinkedList

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

2020-08-03 22:04:54 193

原创 深入理解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 795

原创 深入理解TreeSet

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

2020-08-03 13:46:15 127

原创 深入理解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 216 1

原创 深入理解LinkedList

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

2020-07-31 13:26:42 155

原创 深入理解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 147

原创 深入理解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 319

原创 深入理解Vector

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

2020-07-28 16:24:07 333

原创 浅谈java内存模型

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

2020-07-14 23:21:12 116

原创 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 244

原创 Java多线程学习记录

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

2020-07-07 15:39:44 144

空空如也

空空如也

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

TA关注的人

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