随笔分类 - Java基础
摘要:一、在Collection集合体系中的位置及概述 TreeSet继承自AbstractSet抽象类,实现了NavigableSet、Serializable、Cloneable、RandomAccess接口。它的特点是存储元素唯一,无序(输入和输出无序)。 TreeSet默认情况下是基于TreeMa
阅读全文
摘要:一、在Collection集合体系中的位置及概述 LinkedHashSet 是非同步的有序的,分别是插入顺序和访问顺序,LinkedHashSet的有序性可参考LinkedHashMap的有序性,继承于HashSet,内部基于LinkedHashMap实现的,也就是说LinkedHashSet和H
阅读全文
摘要:一、在Collection集合体系中的位置及概述 HashSet继承自AbstractSet抽象类,实现了Cloneable、Serializable接口,显示的实现了Set接口。至于为什么显示的实现Set接口,我前面的文章讲过。 HashSet而言,它是基于HashMap实现的,本质上讲HashS
阅读全文
摘要:一、在Map集合家族的位置及概述 TreeMap是一个有序的key-value集合,它内部是通过红-黑树实现的。TreeMap继承与AbstractMap,实现了NavigableMap接口,意味着它支持一系列的导航方法,比如返回有序的key集合。它还实现了Cloneable接口,意味着它能被克隆。
阅读全文
摘要:问题场景 在看TreeMap类是如何删除红黑树时,从remove方法看起,当看到deleteEntry(Entry<K,V> p)方法时: 就是图中标红的三行代码: p.key = s.key; p.value = s.value; p = s; 将后继节点的键赋值给待删除节点的键、将后继节点的值赋
阅读全文
摘要:一、在Map集合家族的位置及描述 LinkedHashMap是HashMap的子类,底层数据结构是链表和哈希表并且线程不安全,链表保证了遍历的有序性(元素插入的顺序)、哈希表保证了键的唯一性。实现了Map接口,内部还维护了一个双向链表,在每次插入数据,或者访问、修改数据时,会增加节点、或调整链表的节
阅读全文
摘要:一、概述 红黑树是一种自平衡树在计算机科学中。二叉树的每个节点都有一个额外的位,该位通常被解释为节点的颜色(红色或黑色)。这些颜色位用于确保树在插入和删除期间保持近似平衡。通过以满足某些属性的方式用两种颜色之一绘制树的每个节点来保留平衡,这些属性共同限制树在最坏情况下的不平衡程度。修改树时,随后重新
阅读全文
摘要:一、AVL树定义 在数据结构中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度差的绝对值不能超过一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次旋转来使得AVL树保持平衡。 二、AVL树的特性 1.任意
阅读全文
摘要:一、概述 在看JDK源码时,看到关于map相关的,看到HashMap时,一部分源码与红黑树有关。索性就将树这种数据结构从头学一遍,记录下来,给自己还有他人留个参考和学习的资料。 涉及到使用二叉树进行排序、查找节点值、前序遍历、中序遍历、后续遍历(它们的递归实现和非递归实现)、删除节点、查找最大节点、
阅读全文
摘要:一、在Map集合家族的位置及描述 HashMap子类继承自AbstractMap抽象类,实现了Map,Serializable,Cloneable接口,AbstractMap实现了Map接口的一部分方法,减轻了其子类的负担。 概括的说,HashMap底层存储元素的数据结构是散列(hash)也称为哈希
阅读全文
摘要:位运算符 运算符 运算 范例 << 左移 3 << 2 = 12 --> 3*2*2=12 >> 右移 3 >> 1 = 1 --> 3/2=1 >>> 无符号右移 3 >>> 1 = 1 --> 3/2=1 & 与运算 6 & 3 = 2 | 或运算 6 | 3 = 7 ^ 异或运算 6 ^ 3
阅读全文
摘要:一、在Map集合体系中的位置及概述 AbstractMap抽象类提供Map接口的骨干实现,以最大限度地减少实现此接口所需的工作量。 二、成员变量 // 保存key transient Set<K> keySet; // 保存value transient Collection<V> values;
阅读全文
摘要:一、在Map集合体系中的位置及概述 Map接口式是Map集合体系的顶层接口,它定义和规范了该集合体系的大体规范,所有子类该实现的方法。该体系是以键值对(key-value)对位元素进行存储。 描述: (1)映射(map)是一个存储键、键值对的对象,给定一个键,可以查询得到它的值,键和值都可以是对象。
阅读全文
摘要:一、在Collection集合体系中的位置及概述 AbstractSet抽象类属于Set集合分支的顶层类,它继承了AbstractCollection,实现了Set接口,先回顾一下Set接口,Set接口继承了Collection并没有进行扩展,AbstractCollection实现了Collect
阅读全文
摘要:面试题 List的子类特点: ArrayList: 底层数据结构是数组,查询快,增删慢。 线程不安全,效率高。 Vector: 底层数据结构是数组,查询快,增删慢。 线程安全,效率低。 LinkedList: 底层数据结构是双向链表,查询慢,增删快。 线程不安全,效率高。
阅读全文
摘要:Vector讲解 Vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组。像数组一样,vector类也用从0开始的下标表示元素的位置;但和数组不同的是,当vector对象创建后,数组的元素个数会随着vector对象元素个数的增大和缩小而自动变化。 Vector的数据结构和ArrayL
阅读全文
摘要:前面的几篇文章对LinkedList的超类和本身以及接口进行了讲解,为了更加深入理解LinkedList集合使用存储数据的思想,特意实现了一个自定义的MyLinkedList,源码如下:(如有错误,还望多多指教 import java.util.Iterator; import java.util.
阅读全文
摘要:一、LinkedList在Collection集合体系中的位置 Linked:链表,List:线性表;加在一起,就能理解出LinkedList集合,底层是以链表为存储结构的集合,不过这个链表是双向链表。LinkedList是由AbstractSequentialList超类特化而来。Abstract
阅读全文
摘要:前面的几篇文章对ArrayList的超类和本身以及接口进行了讲解,为了更加深入理解ArrayList集合使用数组存储数据的思想,特意实现了一个自定义的MyArrayList,源码如下: /** * 自定义ArrayList集合 * @param <E> */ public class MyArray
阅读全文
摘要:问题场景: 在看完ArrayList类源码的时候决定自己实现了ArrayList集合,经过一番折腾后,整体要实现的功能都已确定。用数组存储数据和数组的动态扩容都已写好。由于自己实现ArrayList只是为了领会一下其核心是想,所有就实现了一个无参构造,对存储数据的数组进行了初始化。 但是无意间发现自
阅读全文

浙公网安备 33010602011771号