哈希表 是一类容器,也称为“映射”、“联合数组(associative array)” 或者“目录(dictionary)”。
正如语文辞典使用一个定义来关联一个词,哈希表使用一个 键(key) 来唯一标识一个 值(value)。哈希表可以根据键非常快速地执行插入、查找和删除操作;实际上,如果使用得当,这些可以都是常数时间 —— 也就是 O(1) —— 操作。这比从一个有序列表中查找或删除条目快得多,那是 O(n) 操作。
哈希表之所以能快速执行操作,是因为它们使用 散列函数 来定位键。散列函数获得一个键并为其计算一个唯一的值,称为 散列值(hash)。例如,一个散列函数可以接受一个词并将那个词中的字母数作为散列值返回。那是个不好的散列函数,因为 “fiddle”和“faddle”将会散列为相同的值。
当散列函数为不同的键返回相同的散列值时,取决于哈希表的实现会发生各种不同的事情。哈希表可以使用第二个值覆盖第一个值,也可以将值放入一个列表,或者或以简单地抛出一个错误。
注意,哈希表不是必然比列表更快。如果拥有的条目较少 —— 少于一打左右 —— 那么使用有序的集合会获得更好的性能。那是因为,尽管在哈希表中存储和获取数据需要常数时间,那个常数时间值可能会很大,因为计算条目的散列值相对于反引用一两个指针会是一个较慢的过程。对于较小的值,简单地遍历有序列表会比进行散列计算更快。
无论何时,重要的是在选择容器时要考虑自己应用程序的具体数据存储需要。如果应用程序很明显需要某种容器,那么没有理由不去使用它。
相关文章
- 【Mysql】将表中的时间整体增加1个月
- 输入一个非负整数n,生成一张3的乘方表,输出3 0 ~3 n 的值。可调用幂函数计算3的乘方。输入格式:输入在一行中给出一个非负整数n。输出格式:按照幂的递增顺序输出n+1行
- 207. 课程表(dfs)-输入:numCourses = 2, prerequisites = [[1,0],[0,1]] 输出:false 解释:总共有 2 门课程。学习课程 1 之前,你需要先完成课程 0 ;并且学习课程 0 之前,你还应先完成课程 1 。这是不可能的。 提示:
- python中openpyxl模块对excel的处理学习(一)新建工作簿,工作表的创建与命名
- 在mysql数据库中 有学生 成绩四个表_设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的...
- mysql创建学生表命令_在MYSQL 中 1.创建学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 2 写出添加5条数据的SQ...
- Linux内存管理学习1 —— head.S中的段页表的建立
- 学习日记3、投机取巧使两个表的数据同时在一个treeGrid中显示
- 数据库(学习整理)----1--如何彻底清除系统中Oracle的痕迹(重装Oracle时)
- Python中对numpy库的学习(五)常用函数1-分段函数和统计函数