JAVA——哈希表&二分搜索树

71 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,[点击查看活动详情]

Collections集合工具类 == Arrays数组工具类
不需要创建对象,因为内部的方法都是静态的,可以通过类名调用即可。

哈希表

哈希表本身就是一个数组。
该数组中,每一个空间存储的是另外一个数据结构——单向链表。
LinkedList[]--类的数组。
哈希值:由元素自身属性的特点来决定存储的位置(角标)
hashCode():来决定每一个对象所在哈希表中存储的位置。
1,先计算哈希值hashCode()
2,去哈希表中相应的角标找链表
3,判断链表中有没有equals函数,没有-表示该元素不存在-存,有-表示该元素不存在-不存
加载因子是0.75.

哈希冲突

哈希冲突:在计算哈希值的时候出现多个元素同一个哈希值。 1,没有重写hashCode,则将对象的物理内存地址当作哈希值。只要是不同的对象,就有不同的哈希值,不会产生哈希冲突;没有重写equals,则对象之间比得是物理内存地址。只要是不同的对象,就有不同的地址。
2,重写hashCode且给一个固定的值,则所有对象的哈希值都一样--产生哈希冲突;没有重写equals,那对象之间比的是物理内存地址,所以只要不同的对象,就会有不同的地址。
3,重写hashCode,根据对象数据的自身特点来计算哈希值。只要对象之间的数据不同,则哈希值不同;重写equals,根据对象自身数据的特点来进行比较的,只要对象之间的数据相同,则认为对象相同。

二分搜索树

红黑树-AVL平衡树-二分搜索平衡树-二分搜索树。
左孩子小于父节点。右孩子大于父节点.
如果进行中序遍历,将得到一个有序的数列。