Hash索引 (1) 它会使用到hash函数,算出一个确切的值 , 如果key发生变化. hash值也会跟着发生变化. 而且还存在着hash冲突的情况. (2) 联合索引的情况 hash(id+name) = hash值 , 不能支持 部分索引查询和范围查找. 红黑树 (1) 树太高,读取磁盘的次数 ...
分类:
数据库 时间:
2019-12-31 01:12:18
阅读次数:
97
Java8 HashMap Java8 对 HashMap 进行了一些修改,最大的不同就是利用了红黑树,所以其由 数组+链表+红黑树 组成。 根据 Java7 HashMap 的介绍,我们知道,查找的时候,根据 hash 值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才 ...
分类:
编程语言 时间:
2019-12-30 17:08:57
阅读次数:
78
select和epoll都是多路复用的实现。 select: 调用select(fds),把fds(最多1024个)从用户空间拷贝到内核空间,进程阻塞, 当socket缓冲区有数据,唤醒进程,遍历fds,处理。 epoll: epoll_create在内核空间创建eventpoll对象(包括红黑树和 ...
分类:
其他好文 时间:
2019-12-29 20:13:04
阅读次数:
71
第五章、关联容器 5.0、关联容器 标准的STL关联式容器分为set(集合)和map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和multimap(多键映射表)。这些容器的底层机制均以RB-tree(红黑树)完成。RB-tree也是一个独立容器,但并不开放给外界使用。 SGIS ...
分类:
编程语言 时间:
2019-12-25 01:42:39
阅读次数:
98
1.HashMap底层是通过什么来实现的? 在JDK1.7中是通过数组+链表来实现的; 在JDK1.8中是通过数组+链表+红黑树来实现的 2.HashMap在JDK1.8中为什么使用红黑树? 为了弥补JDK1.7中会出现的单链表过长(默认size超过8即转为红黑树,也可自己设置),导致查询效率低的问 ...
分类:
其他好文 时间:
2019-12-24 18:12:29
阅读次数:
106
前言 红黑树的起源,自然是二叉查找树了,这种树结构从根节点开始,左子节点小于它,右子节点大于它。每个节点都符合这个特性,所以易于查找,是一种很好的数据结构。但是它有一个问题,就是容易偏向某一侧,这样就像一个链表结构了,失去了树结构的优点,查找时间会变坏。 所以我们都希望树结构都是矮矮胖胖的,像这样: ...
分类:
其他好文 时间:
2019-12-23 00:59:01
阅读次数:
123
1.定义: 添加枚举类元素的专用集合类 2.与其他集合类区别: EnumSet内部实现不使用常见的数据结构,比如数组(ArrayList),链表(LinkedList),哈系表(HashMap、Hashtable、HashSet),红黑树(TreeMap、TreeSet)而是使用位运算完成集合的基本 ...
分类:
编程语言 时间:
2019-12-21 20:55:03
阅读次数:
98
ConcurrentHashMap 内部结构 在JDK1.8之前的实现结构是:ReentrantLock+Segment+HashEntry+链表 JDK1.8之后的实现结构是:synchronized+CAS+Node+链表或红黑树(与HashMap一致) 而1.8之前锁的是Segment,1.8 ...
分类:
其他好文 时间:
2019-12-20 18:42:46
阅读次数:
74
HashMap 内部结构 内部是一个Node数组,每个Node都是链表的头,当链表的大小达到8之后链表转变成红黑树。 put操作 流程可以概括为:如果Node数组为空则先按照默认容量初始化数组。利用计算得到的hsah值确定数组下标, 1. 如果下标所在位置的Node为null,则直接新创建节点放在此 ...
分类:
其他好文 时间:
2019-12-17 17:53:14
阅读次数:
98
关联式容器就是通过key值来寻找value,这个和数据库很相像,为了提升查找效率,因此关联式容器底层大多数用红黑树或哈希表来实现。 红黑树是高度平衡的二叉树,它也被称为平衡二元搜索树。 如上所示,正常++ite的访问出来的顺序即为中序遍历:5,6,7,8,10,11,12,13,15 set有两种插 ...
分类:
其他好文 时间:
2019-12-16 17:47:11
阅读次数:
95