数据结构
文章平均质量分 64
时间慢慢
这个作者很懒,什么都没留下…
展开
-
二叉查找树(BST) | 平衡二叉查找树(AVL) | 红黑树(RBT)
二叉查找树(BST) 特点:对任意节点而言,左子树(若存在)的值总是小于本身,而右子(若存在)的值总是大于本身。 查找:从根开始,小的往左找,大的往右找,不大不小的就是这个节点了; 插入:从根开始,小的往左,大的往右,直到叶子,就插入, 时间复杂度期望为Ο(logn); 删除:如果是叶子节点,直接删除;如果不是,则去找这个节点左子树的最大值,与之交换;如果交换后还不是叶子节点就继续找做字数原创 2017-09-05 18:12:49 · 842 阅读 · 0 评论 -
哈希表---哈希函数构建和冲突处理
哈希法又称散列法、杂凑法以及关键字地址计算法等,相应的表称为哈希表。 基本思想是:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系f,使得p=f(k),f称为哈希函数。创建哈希表时,把关键字为k的元素直接存入地址为f(k)的单元; 以后当查找关键字为k的元素时,再利用哈希函数计算出该元素的存储位置p=f(k),从而达到按关键字直接存取元素的目的。 当关键字集合很大时,关键字值原创 2017-08-30 11:30:50 · 1110 阅读 · 0 评论 -
深入分析ConcurrentHashMap
线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。 效率低下的HashTable容器 HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,其他线程访问H原创 2017-08-30 19:05:37 · 1067 阅读 · 0 评论 -
HashMap 中插入null key 的过程
添加key==null的Entry时,调用putForNullKey方法 正常的是put方法: 当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。 当两个不同的键对象的hashcode相同时它们会储存在同一个bucket位置的链表中。键对象的equals()方法用来找到键值对。(比较key) putFor原创 2017-08-30 20:20:28 · 3975 阅读 · 0 评论