B树
特点:
(1)1 个节点可以存储超过 2 个元素、可以拥有超过 2 个子节点
(2)拥有二叉搜索树的一些性质
(3)平衡,每个节点的所有子树高度一致
m阶B树的性质(m>=2):
- 假设一个节点存储的元素个数为x
- 根节点:1≤x≤m − 1
-
非根节点: ┌ m/2 ┐ − 1 ≤ x ≤ m − 1
-
如果有子节点,子节点个数 y = x + 1✓ 根节点: 2 ≤ y ≤ m✓ 非根节点: ┌ m/2 ┐ ≤ y ≤ m➢ 比如 m = 3 , 2 ≤ y ≤ 3 ,因此可以称为( 2, 3 )树、 2-3 树➢ 比如 m = 4 , 2 ≤ y ≤ 4 ,因此可以称为( 2, 4 )树、 2-3-4 树
集合
ListSet
TreeSet
TreeSet(红黑树):存储元素必须具备可比较性。
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
}
}
映射
TreeMap
TreeMap(红黑树):存储元素的key必须具备可比较性。
HashMap
HashMap:
//用来比较两个对象是否相等
if (o==null || !(o instanceof Person)){ return false; }
对象o是Person则返回true,是Person的子类也返回true。
if (o==null||o.getClass()!=getClass()){ return false; }
getClass()拿到当前对象类Person。
扩容:
当扩容为原来容量的2倍时,节点的索引有2种情况:
1.保持不变
2.要么index=index+旧容量
例:
java官方HashMap为什么不需要缩容?
答:假设数据量达到百万级别,现在清空,可能通过扩容再次达到这个规模。Java程序一般用在服务器上面,内存各方面远远比移动设备好,所以不需要缩容。Android开发不一定用(针对移动设备有别的)
TreeMap vs HashMap
1.
何时选择TreeMap?
元素具备可比较性且要求升序遍历(按照元素从小到大)
2.何时选择HashMap?
无序遍历
LinkedHashMap
在HashMap的基础上维护元素的添加顺序,使得遍历的结果是遵从添加顺序的