private final static int[] digits = new int[(int) '9' + 1];
static {
for (int i = '0'; i <= '9'; ++i) {
digits[i] = i - '0';
}
}
上面这段代码,虽然浪费了一些空间,key是char类型的0-9, value是int类型的0-9
//fastjson中抽出来的,SymbolTable使用的核心源码,就是用来缓存String,避免String过多
String a = "abcdefg";
char[] buf = a.toCharArray();
int hash = 0;
for(int i=0;i<buf.length;i++){
hash = 31*hash + ch;
}
int hashTableSize = 128;
int bucket = hash & (hashTableSize -1); //意思是只保留最低7个二进制位,确保可以放入桶中
String sym = symbols[bucket]; //从hashTable中取出同一个桶中的String
if(sym != null){
if(sym.length() == buf.length){//从宏观判断是否可能是同一个String
char[] characters = symbols_char[bucket];//早就缓存好了,避免了从String再次转换的速度问题
for (int i = 0; i < len; i++) {//微观上对比
if (buffer[offset + i] != characters[i]) {
match = false;
break;
}
}
if(match){ //如果匹配了就直接返回了
return sym;
}
}else{
match=false;
}
}
//来到这里,说明没有在hashTable里面找到,所以得在hashTable中给存起来
symbols_char[bucket] = new char[buf.length];
System.arraycopy(buf,0,symbols_char[bucket],0,buf.length);
symbols[bucket]=new String(symbols_char[bucket]).intern();
return symbols_char[bucket];
分享到:
相关推荐
在本主题中,我们将深入探讨哈希表的原理、构造方法以及它与二叉排序树的关系。 哈希表的核心是哈希函数,它将任意大小的键转化为固定长度的哈希值,这个哈希值通常是一个整数,作为数组的索引。理想的哈希函数应该...
哈希表是一种高效的数据结构,它通过特定的函数——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速的查找、插入和删除操作。这种数据结构的设计旨在解决在大量数据中查找特定元素的问题...
4. **C++实现**:在C++中,可以自定义哈希表类,使用模板来支持不同类型的键和值。通常包括插入、查找和删除等基本操作。C++标准库提供了一个STL容器`std::unordered_map`,它是基于哈希表实现的,可以直接使用。 5...
哈希表是一种高效的数据结构,...总的来说,哈希表通过链地址法解决冲突,提供了一种快速处理大量数据的方式,尤其适用于对学生姓名和成绩这类信息的管理。理解哈希函数的设计和冲突解决策略是理解和使用哈希表的关键。
哈希表是一种高效的数据结构,它通过特定的函数——哈希函数,将数据映射到一个固定大小的数组中,以此实现快速的插入、查找和删除操作。在本压缩包"hash_operate.rar"中,重点是探讨哈希表的构造方法以及其基本操作...
哈希表是一种高效的数据结构,它通过特定的哈希函数将键(key)映射到一个固定大小的数组中,以此实现...这个主题涵盖了哈希函数的设计、冲突解决、哈希表的构造和查询操作,这些都是计算机科学中基础且重要的知识点。
哈希表通常以数组为基础,其核心在于解决键值对的冲突问题。 首先,我们来谈谈哈希函数。哈希函数是哈希表的灵魂,它的主要任务是将键转换成数组的索引。理想的哈希函数应该能够将不同的键均匀地分布到数组的不同...
哈希表是一种高效的数据结构,它通过特定的哈希函数将键(key)映射到一个固定大小的数组中,以此实现快速查找、插入和删除操作。在本题中,我们面临的是一个C语言实现的练习,需要创建一个哈希表来存储30个中国人...
本文介绍了一个使用C++实现的哈希表类,该类使用了模板技术来增强其通用性,并且使用了除留余数法作为散列函数的基础算法。该类不仅支持基本的操作如插入、删除、查找,还提供了遍历功能以便于调试和展示。 #### ...
哈希表是一种高效的数据结构,它通过特定的哈希函数将键(key)映射到一个固定大小的数组中,以此实现快速的查找、插入和删除操作。在C++中,我们可以自定义哈希表来满足不同的需求。下面将详细讨论标题和描述中涉及...
- **哈希表类(Hash Table Class)**:包含哈希表的大小、哈希桶数组以及相关操作(如插入、查找、删除等)的成员函数。 下面是一个简单的C++哈希表实现框架: ```cpp #include #include template , typename ...
哈希表是一种高效的数据结构,它通过特定的算法——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速查找、插入和删除操作。在学生管理的场景中,我们可以用哈希表来存储学生的信息,例如...
哈希表是一种在计算机科学中广泛使用的数据结构,它的核心思想是通过特定的函数(哈希函数)将数据映射到一个固定大小的数组中,从而实现快速的查找、插入和删除操作。在编程中,理解和掌握哈希表的原理与实现是至关...
哈希表作为数据结构领域的一项重要发明,其在计算机科学中的应用极为广泛。它通过哈希函数的映射机制,将数据的存储位置与关键字关联起来,极大地提高了数据检索的效率。本文档根据给定的实验报告,旨在深入探讨哈希...
在Java语言程序设计中,数组、字符串、向量和哈希表是处理集合数据的重要结构。本章节将详细介绍这些概念和它们的用法。 首先,数组是一种数据结构,它包含一系列相同类型的数据项,通过连续的内存地址进行存储。...
哈希表是一种在计算机科学中广泛使用的数据结构,它的核心思想是通过一种称为哈希函数的算法,将关键字(key)映射到一个固定大小的数组(也称为哈希表或散列表)中的特定位置,以此实现快速的查找、插入和删除操作...
- **系统分析及设计思路**:分析哈希表的基本原理,包括哈希函数的构造,以及如何处理哈希冲突(开放寻址法、链地址法等)。设计思路可能包括选择合适的哈希函数,确定冲突解决策略,以及考虑如何优化存储和查找...