范型
什么是范型
- 帮助我们建立类型安全的集合
- 范型的本质就是数据类型的参数化 范型相当于是数据类型的占位符 告诉编译器 在调用的时候 使用范型的地方要传入实际类型(范型的处理时机是编译时处理)
- 一般使用T、E、V 来表示范型
- 范型其实就是一个正常的类型的一个范式 在定义方法或者类的时候 使用范型将相同的类型数据统一声明约定出来 在真正调用的时候 再给定义范型的地方放入真正的具体的类型值 相应的 该类中或者方法中 定义的相同的范型名的地方 就会是相同的传入的具体类型 在使用的时候也会更加有约束性和规范性
为什么使用范型
- 保证了类型的安全性(有了强制的类型规定检查)
- 取消了类型转换(类型不一致便会报错 则不需要进行类型转换了)
- 避免了不必要的封装和拆箱(将返回值类型直接定义出来 不需要在使用的时候进行拆箱和封箱操作了)
如何使用范型(后续文章总结)
范型使用详细使用
参考地址: https://blog.csdn.net/ChenRui_yz/article/details/122935621
散列
散列表
什么是散列表
散列表也叫哈希表,是一种提供键和值的映射关系的数据结构
散列表工作原理
散列表的本质也是数组, 数组的查询效率非常高, 通过数组指针就可以直接找到对应的值。 数组的查找效率就是O(1) 散列表中, 我们根据提供的Key就可以找到相应的Value值, 这时候我们就需要中转站将key值与数组下标进行转换(中间站就是hash函数 一般是通过取余的方式 实现将得到的int类型的hashCode值取余 找到对应的数组下标)
散列表相关操作
写操作
散列的写操作就是在散列表中添加键值对, 通过hash函数 将key转为数组下标 然后在该位置上插入Entry(Entry: key + value)
注意: 不同的key可能会出现相同的下标 那么就会成为哈希冲突
那么如何解决哈希冲突呢?开放寻址法和链表法
- 开放寻址法
当数组的下标发生冲突时, 将下一个Entry存储在数组的下一个空位置 - 链表法
数组中每个数组模块中 每个对象不仅是一个对象 还是一个链表的头, 当发生哈希冲突的时候 下一个冲突的Entry对象就会接入到对应的链表中
读操作
根据哈希函数算数要读key的散列表数组下标, 找到下标后再在该下标里面找是否有找的key。
比如 我们找key为100067的value值 通过hash函数算法找到数组下标为1, 然后在下标为1 的数组内容内查找 是否存储了key10067的Entry对象 找到返回value
hashCode
hashCode其实就是Entry对象通过hash函数 将key转变成的一个数组的下标的值也就是在哈希表中的位置