
javase
文章平均质量分 78
种棵红黑树
牙疼
展开
-
ConcurentHashMap解析
1、并发Map存储的数据结构数组+链表+红黑树,存储数据的单元是Node结构,Node结构有key,value以及指向下一个Node的引用,还有hash字段2、并发Map的负载因子可以修改吗?可以指定吗?普通的 HashMap 的负载因子可以修改,但是 ConcurrentHashMap 不可以,因为它的负载因子使用final关键字修饰,值是固定的 0.75 。3、Node对象的hash字段在一般情况下,必须是>=0,为什么?散列表在扩容的时候,会触发一个迁移数据的过程,把原表的数原创 2022-01-17 22:07:12 · 943 阅读 · 0 评论 -
JAVA-JUC篇
JUC是并发编程中非常重要的一个模块,另外最重要的是在面试中,这一块也是最为频繁被问的,如果能把这一块掌握好,那绝对吹起来牛逼哄哄。JUC提供了比synchronized更加高级的同步结构,实现更加丰富的多线程操作。【JUC】即java.util.concurrent包,主要有以下几个模块1、原子类操作2、锁3、阻塞队列4、并发集合5、同步器6、线程池7、异步组合编...原创 2020-04-21 13:01:05 · 319 阅读 · 0 评论 -
JAVA-JDK1.7/JDK1.8之HashMap区别篇
上篇分别说了JDK1.7和1.8版本的HashMap具体源码解析, 但这俩者具体是有啥区别?且听这回详解不管是1.7还是1.8的HashMap,首先我们要明确HashMap是线程不安全的!!!数据结构:JDK1.7采用的是数组+单链表结构;JDK1.8采用数组+链表+红黑树结构数据插入操作:JDK1.7是采用头部插入数据,在get查询的时候能够快速的查找到数据,但是因为采用头插法可能会...原创 2020-04-15 17:14:50 · 262 阅读 · 0 评论 -
JAVA-HashMap1.8篇
基于JDK1.7版本或之前的HashMap,JDK1.8的HashMap基于数据结构进行了优化,采用了数组+链表+红黑树的结构主要成员变量:transient Node<K,V>[] table:这是一个Node类型的数组(也有称作Hash桶),可以从下面源码中看到静态内部类Node在这边可以看做就是一个节点,多个Node节点构成链表,当链表长度大于8的时候转换为红黑树。...原创 2020-04-15 14:32:04 · 194 阅读 · 0 评论 -
JAVA-HashMap1.7篇
数组:采用一定的存储单元存储一群数据,对于指定下标查找,时间复杂度为O(1),但对定值查找,则需要遍历整个数据,一个一个的比较,时间复杂度是O(n),如果说是有序数组,可以采用二分查找法,增大查找效率,不过对于新增删除等涉及到数组元素的移动,时间复杂度都是O(n)链表:对于链表的新增,删除,只需要将对应的节点引用上去就ok,时间复杂度是O(1),而查找则需要遍历链表,时间复杂度为O(N)二...原创 2020-04-14 17:53:34 · 210 阅读 · 0 评论 -
JAVA-LOCK锁篇
【一】ReentrantLock:重入互斥锁,可以重新进入的锁,当前线程通过调用lock.lock()获得锁,如果再进入这个方法,不会阻塞,增加重入的次数。Synchronized和ReentantLock都支持重入重入锁主要就是为了避免死循环,死锁的发生【二】ReentrantReadWriteLock读写锁...原创 2020-02-19 10:42:27 · 385 阅读 · 0 评论 -
JAVA-关键字volatile篇
volatile变量的特性1、保证可见性,但不保证原子性 当写一个volatile变量时,会把该线程本地内存中的变量强制刷新到主内存中 写操作会导致其他线程中的缓存无效2、禁止指令重排 重排序是指编译器和处理器为了优化程序性能对指令序列进行排序的一种手段,具体遵守以下规则: 重排序操作不会对存储数据依赖关系的操作进行重排序,比如a=1...原创 2020-02-19 09:00:03 · 219 阅读 · 0 评论 -
JAVA-集合篇
List,Set,Map都是接口,前俩个继承Collection接口,Map是独立接口Set接口相关的实现类:HashSet,LinkedHashSet,TreeSetList接口相关的实现类:ArrayList,LinkedList,VectorMap接口相关的实现类:HashMap,HashTable,LinkedHashMap,TreeMap---总结1、List有序,可...原创 2020-02-15 09:29:37 · 229 阅读 · 0 评论 -
JAVA-IO篇
一、java中有几种类型的流字节流,字符流二、字节流和字符流哪个好,如何选择所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的字节流在操作文件时,即使不关闭资源(close...原创 2020-02-15 08:14:41 · 194 阅读 · 0 评论 -
JAVA-线程篇
线程和进程的区别?1、进程式系统进行资源分配的基本单位,有独立的内存地址空间;线程是CPU调度的基本单位,没有单独的地址空间,有独立的栈,局部变量,寄存器,程序计数器等。2、创建进程的开销大,包括创建虚拟地址空间等需要大量系统资源;创建线程开销小,基本上只有一个内核对象和一个堆栈3、一个进程无法直接访问另一个进程的资源,同一个进程内的多个线程共享进程的资源4、进程切换开销大,线程切...原创 2019-08-25 09:09:32 · 175 阅读 · 0 评论 -
Java-内部类篇
内部类顾名思义在类的内部定义一个类。内部类依赖于外部类存在。内部类的好处:1、实现多重集成2、内部类可以很好的实现隐藏,一般的非内部类,是不允许有private与protected修饰的3、减少了类文件编译后的产生的字节码文件的大小【一】成员内部类作为外部类的一个成员存在,与外部类的属性,方法并列成员内部类持有外部类的引用成员内部类中不能定义static变量和方法...原创 2019-04-09 10:30:39 · 150 阅读 · 0 评论 -
项目中多线程灵活使用
最初的时候,很少使用多线程方面的知识,直到这一次在项目中解决一些业务问题,从而运用到多线程的知识,因此便准备记录一下。项目中大体的业务: 视踪平台人员检索调用的是海康平台的接口,返回的数据有大图url和目标图url,但是奇葩的是海康返回的图片url是加密的https格式的网络路径,在浏览器中不可以加载,所以项目中页面上显示图片丢失。至此开始寻求解决方案 1、...原创 2019-04-02 10:37:24 · 6589 阅读 · 1 评论 -
JAVA-线程池篇
线程的劣势:1、线程创建的数量是不可控的2、频繁创建和销毁线程线程池的优势:1、控制线程的数量2、降低频繁创建和销毁线程3、对于任务的响应速度更快java中提供的线程池jdk中的ExecutorsExecitors.newFixedThreadPool(3);固定线程Executors.newSingThreadExecutor();只有一个核心线程的线程池...原创 2019-03-19 14:09:19 · 318 阅读 · 0 评论 -
List,Set,Map的区别
开门见山,直接先上这副图,List和Set是Collection的子类List: 1、可以允许重复的对象 2、可以插入多个null元素 3、是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序 4、常用的实现类有ArrayList,LinkedList和Vector。ArrayList提供了使用索引的随意访问,底层结构...原创 2019-03-19 11:30:32 · 8821 阅读 · 0 评论