随笔分类 - Java集合面试题
摘要:JDK8 之前底层实现是数组 + 链表,JDK8 改为数组 + 链表/红黑树,节点类型从Entry 变更为 Node。 主要成员变量包括存储数据的 table 数组、元素数量 size、加载因子 loadFactor。 table 数组记录 HashMap 的数据,每个下标对应一条链表,所有哈希冲突
阅读全文
摘要:TreeMap 基于红黑树实现,增删改查的平均和最差时间复杂度均为 O(logn) ,最大特点是 Key 有序。 Key 必须实现 Comparable 接口或提供的 Comparator 比较器,所以 Key 不允许为 null。 HashMap 依靠 hashCode 和 equals 去重,而
阅读全文
摘要:Set 不允许元素重复且无序,常用实现有 HashSet、LinkedHashSet 和 TreeSet。 HashSet HashSet 通过 HashMap 实现,HashMap 的 Key 即 HashSet 存储的元素,所有 Key 都使用相同的 Value ,一个名为 PRESENT 的
阅读全文
摘要:LinkedList 本质是双向链表,与 ArrayList 相比插入和删除速度更快,但随机访问元素很慢。 除继承 AbstractList 外还实现了 Deque 接口,这个接口具有队列和栈的性质。 成员变量都被 transient 修饰,原理和 ArrayList 类似。 LinkedList
阅读全文
摘要:特点 ArrayList 是容量可变的非线程安全列表,使用数组实现,集合扩容时会创建更大的数组,把原有数组复制到新数组。 // 新容量扩大到原容量的大约1.5倍,右移一位相当于原数值除以2,扩容并不是严格的1.5位 int newCapacity = oldCapacity + (oldCapaci
阅读全文