
java 核心源码和重点面试题
大数据学习爱好者
想学好技术的年轻人
展开
-
集合在 Java 7 和 8 有何不同和改进
1.所有集合都新增了forEach 方法1.2 List 区别1.2.1 ArrayListArrayList 无参初始化时,Java 7 是直接初始化 10 的大小,Java 8 去掉了这个逻辑,初始化时是空数组,在第一次 add 时才开始按照 10 进行扩容,下图是源码的差异对比图:1.3 Map 区别1.3.1 HashMap和 ArrayList 一样,Java 8 中 Ha...原创 2020-04-05 21:15:32 · 280 阅读 · 0 评论 -
HashSet、TreeSet 源码解析-10
HashSet1.底层实现基于 HashMap,所以迭代时不能保证按照插入顺序,或者其它顺序进行迭代;2.add、remove、contanins、size 等方法的耗时性能,是不会随着数据量的增加而增加的,这个主要跟 HashMap 底层的数组数据结构有关,不管数据量多大,不考虑 hash 冲突的情况下,时间复杂度都是 O (1);3.线程不安全的,如果需要安全请自行加锁,或者使用 Col...原创 2020-04-05 20:42:11 · 183 阅读 · 0 评论 -
Map源码会问哪些面试题-9
1 Map 整体数据结构类问题1.1 说一说 HashMap 底层数据结构答:HashMap 底层是数组 + 链表 + 红黑树的数据结构,数组的主要作用是方便快速查找,时间复杂度是 O(1),默认大小是 16,数组的下标索引是通过 key 的 hashcode 计算出来的,数组元素叫做 Node,当多个 key 的 hashcode 一致,但 key 值不同时,单个 Node 就会转化成链表,...原创 2020-04-05 20:04:57 · 133 阅读 · 0 评论 -
TreeMap 和 LinkedHashMap--8
1.TreeMapComparable 和 Comparator 两者进行排序的方式,而 TreeMap 利用的也是此原理,从而实现了对 key 的排序。TreeMap 底层的数据结构就是红黑树,和 HashMap 的红黑树结构一样。不同的是,TreeMap 利用了红黑树左节点小,右节点大的性质,根据 key 进行排序,使每个元素能够插入到红黑树大小适当的位置,维护了 key 的大小关系,适...原创 2020-04-05 18:33:42 · 141 阅读 · 0 评论 -
hashmap源码-7
hashmap总体设计1.HashMap 底层的数据结构主要是:数组 + 链表 + 红黑树。其中当链表的长度大于等于 8 时,链表会转化成红黑树,当红黑树的大小小于等于 6 时,红黑树会转化成链表,整体的数据结构如下:1.1 类注释从 HashMap 的类注释中,我们可以得到如下信息:允许 null 值,不同于 HashTable ,是线程不安全的;load factor(影响因子) ...原创 2020-04-05 16:27:16 · 147 阅读 · 0 评论 -
List-6
1.ArrayList 无参数构造器构造,现在 add 一个值进去,此时数组的大小是多少,下一次扩容前最大可用大小是多少?答:此处数组的大小是 1,下一次扩容前最大可用大小是 10,因为 ArrayList 第一次扩容时,是有默认值的,默认值是 10,在第一次 add 一个值进去时,数组的可用大小被扩容到 10 了。2.如果我连续往 list 里面新增值,增加到第 11 个的时候,数组的大小是...原创 2020-02-28 00:07:39 · 214 阅读 · 0 评论 -
LinkedList-5
LinkedList 适用于集合元素先入先出和先入后出的场景,在队列源码中被频繁使用.LinkedList 底层数据结构是一个双向链表,整体结构如下图所示:我们有几个概念如下:链表每个节点我们叫做 Node,Node 有 prev 属性,代表前一个节点的位置,next 属性,代表后一个节点的位置;first 是双向链表的头节点,它的前一个节点是 null。last 是双向链表的尾节点,...原创 2020-02-24 17:50:25 · 164 阅读 · 0 评论 -
ArrayList-4
ArrayList 整体架构比较简单,就是一个数组结构.源码参数:1.DEFAULT_CAPACITY 表示数组的初始大小,默认是 10,这个数字要记住;2.size 表示当前数组的大小,类型 int,没有使用 volatile 修饰,非线程安全的;3.modCount 统计当前数组被修改的版本次数,数组结构有变动,就会 +1。1.1初始化我们有三种初始化办法:无参数直接初始化、指定...原创 2020-02-24 17:19:50 · 149 阅读 · 0 评论 -
工具类-3
工具类都有哪些通用的特征写法:1.构造器必须是私有的。这样的话,工具类就无法被 new 出来,因为工具类在使用的时候,无需初始化,直接使用即可,所以不会开放出构造器出来。2.工具类的工具方法必须被 static、final 关键字修饰。这样的话就可以保证方法不可变,并且可以直接使用,非常方便。我们需要注意的是,尽量不在工具方法中,对共享变量有做修改的操作访问(如果必须要做的话,必须加锁),因...原创 2020-02-23 21:53:41 · 239 阅读 · 0 评论 -
java 重点关键字-2
1.static关键字static 静态的、全局的,一旦被修饰,说明被修饰的东西在一定范围内是共享的。static 只能修饰类变量、方法和方法块。1.1 修饰对象当 static 修饰类变量时,如果该变量是 public 的话,表示该变量任何类都可以直接访问,而且无需初始化类,直接使用 类名.static 变量 这种形式访问即可这时候我们非常需要注意的一点就是线程安全的问题了,因为当多...原创 2020-02-23 16:54:19 · 211 阅读 · 0 评论 -
String 与Long源码以及面试题-1
String1.不变性不可变是指的是类值一旦被初始化,就不能再被改变了,如果被修改,将会是新的类。String s ="hello";s ="world";源码:public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** ...原创 2020-02-23 16:39:48 · 441 阅读 · 0 评论