Java底层技术
文章平均质量分 79
锁、同步、IO、并发包等等最基础的Java底层技术
爱喝咖啡的程序员
这个作者很懒,什么都没留下…
展开
-
04_HashMap
04_Hashmap一. hashmap的基本原理二. 红黑树三. hashmap源码3.1 put(key, value)三. 疑问3.1 既然红黑树的查询性能比链表高得多,为什么不直接使用红黑树来代替链表呢?一. hashmap的基本原理二. 红黑树https://www.sohu.com/a/335449747_463994三. hashmap源码1.size到底是hashmap中目前存放的元素个数,还是在table上存放的node的个数,不包括链表上挂载的?2.如果hash值相同,那么不原创 2021-07-15 23:24:49 · 375 阅读 · 2 评论 -
08_集合包的fail fast机制
首先说说现象,当我们使用iterator迭代器遍历一个集合的过程中,如果其它线程向这个集合新增或删除了一个key-value,那么当前线程会抛出ConcurrentModificationException异常。然后说说原理。无论是AbstractList,还是HashMap,它们都拥有一个modCount变量,每当我们向集合新增或者删除元素,都会使modCount的值增加1,这个参数就好像集合的版本号。当我们在迭代之前,会创建一个expectedModCount,记录迭代之前的版本号,迭代完毕后,会再原创 2021-07-06 22:36:23 · 301 阅读 · 0 评论 -
07_HashSet、LinkedHashSet、TreeSet
07_HashSet、LinkedHashSet、TreeSet一. 基本原理和优缺点二. 源码2.1 HashSet add(E e)2.2 HashSet iterator()一. 基本原理和优缺点HashSet的底层是基于HashMap实现的,只不过在插入数据时,key对应的value是一个空对象。后续所有的操作直接针对key来做就可以了。由于hashmap的key是不能重复的,一旦重复,那么在hash寻址时就会找到同一个数组下标,接着因为key的值重复,就会导致新的value覆盖旧value。原创 2021-07-06 22:10:50 · 328 阅读 · 0 评论 -
06_TreeMap
06_TreeMap一. 基本原理和优缺点二. 源码分析2.1 put(K key, V value)2.2 红黑树节点的结构一. 基本原理和优缺点TreeMap与Hashmap、LinkedHashMap不同,他的底层不再是数组,而是一颗红黑树。在插入、删除或者替换元素时,TreeMap能按照事先约定的顺序来对key进行排序和迭代查询。支持二叉搜索,因此做查询操作时,时间复杂度是O(logn),虽然比起纯粹使用数组要慢O(1),但是比普通的链表要快O(n)。插入数据类似链表,只调整几个指针就实现插入原创 2021-07-06 00:25:35 · 354 阅读 · 0 评论 -
05_LinkedHashMap
05_LinkedHashMap一. 基本原理和优缺点二. 源码分析2.1 put(K key, V value) 初次插入2.2 put(K key, V value) 覆盖已经存在的key2.3 remove一. 基本原理和优缺点LinkedHashMap能记录你插入元素的顺序,在遍历时,能按照插入的顺序给你遍历出来。LinkedHashMap是HashMap的子类,所以基本的操作与hashmap类似。不过呢,在插入、删除、替换key-value对的时候,LinkedHashMap会维护一个链表结原创 2021-07-05 23:23:04 · 482 阅读 · 0 评论 -
03_Vector和Stack
03_Vector和Stack一. 基本原理和优缺点二. 源码分析2.1 push2.2 pop三. 总结一. 基本原理和优缺点Stack继承了Vector,Vector底层还是一个List,也就是基于数组来实现的,所以ArrayList有的优点,比如获取元素的速度快,随机读,它都有,与此相对的,ArrayList的缺点,比如从中间插入一个元素,从中间删除一个元素,Stack也存在。但是呢,Stack使用最多的方法就是push和pop,换句话说,Stack的作者并非希望我们把使用ArrayList的那原创 2021-07-03 13:35:40 · 654 阅读 · 0 评论 -
02_LinkedList
02_LinkedList一. 基本原理和优缺点二. 源码分析2.1 add2.2 node2.3 add(int index, E element)2.4 get2.5 getFirst2.6 peek2.7 getLast2.8 removeLast2.9 removeFirst2.10 remove(int index)三. 总结一. 基本原理和优缺点优点:1.底层基于双向链表,往LinkedList中间插入元素时,不需要移动大量的元素,只需要修改前后节点的指针,速度快。2.适合频繁、大量的插原创 2021-07-02 00:14:58 · 177 阅读 · 1 评论 -
01_ArrayList
01_ArrayList一. 基本原理和优缺点二. 源码分析1.1 默认的构造函数1.2 add(E e)1.3 add(int index, E element)1.4 set(int index, E element)1.5 get(E element)1.6 remove(int index)三. 结论一. 基本原理和优缺点优点:1.通过下标读取元素的速度很快,这是因为ArrayList底层基于数组实现,可以根据下标快速的找到内存地址,接着读取内存地址中存放的数据。2.随机读的性能很高,仍然是原创 2021-07-01 08:31:36 · 201 阅读 · 0 评论