`

数组构造类哈希表

阅读更多
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_哈希表的构造_构造哈希表

    哈希表是一种高效的数据结构,它通过特定的函数——哈希函数,将数据映射到一个固定大小的数组中,以此实现快速的插入、查找和删除操作。在本压缩包"hash_operate.rar"中,重点是探讨哈希表的构造方法以及其基本操作...

    数据结构哈希表

    哈希表是一种高效的数据结构,它通过特定的哈希函数将键(key)映射到一个固定大小的数组中,以此实现...这个主题涵盖了哈希函数的设计、冲突解决、哈希表的构造和查询操作,这些都是计算机科学中基础且重要的知识点。

    哈希表的建立及其构造

    哈希表通常以数组为基础,其核心在于解决键值对的冲突问题。 首先,我们来谈谈哈希函数。哈希函数是哈希表的灵魂,它的主要任务是将键转换成数组的索引。理想的哈希函数应该能够将不同的键均匀地分布到数组的不同...

    哈希表的建立与查找 C语言 数据结构练习

    哈希表是一种高效的数据结构,它通过特定的哈希函数将键(key)映射到一个固定大小的数组中,以此实现快速查找、插入和删除操作。在本题中,我们面临的是一个C语言实现的练习,需要创建一个哈希表来存储30个中国人...

    一个c++实现的哈希表类

    本文介绍了一个使用C++实现的哈希表类,该类使用了模板技术来增强其通用性,并且使用了除留余数法作为散列函数的基础算法。该类不仅支持基本的操作如插入、删除、查找,还提供了遍历功能以便于调试和展示。 #### ...

    哈希表操作(c++版)

    哈希表是一种高效的数据结构,它通过特定的哈希函数将键(key)映射到一个固定大小的数组中,以此实现快速的查找、插入和删除操作。在C++中,我们可以自定义哈希表来满足不同的需求。下面将详细讨论标题和描述中涉及...

    C++源代码:哈希表算法

    - **哈希表类(Hash Table Class)**:包含哈希表的大小、哈希桶数组以及相关操作(如插入、查找、删除等)的成员函数。 下面是一个简单的C++哈希表实现框架: ```cpp #include #include template , typename ...

    学生管理哈希表的实现算法

    哈希表是一种高效的数据结构,它通过特定的算法——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速查找、插入和删除操作。在学生管理的场景中,我们可以用哈希表来存储学生的信息,例如...

    哈希表 代码

    哈希表是一种在计算机科学中广泛使用的数据结构,它的核心思想是通过特定的函数(哈希函数)将数据映射到一个固定大小的数组中,从而实现快速的查找、插入和删除操作。在编程中,理解和掌握哈希表的原理与实现是至关...

    实验5----哈希表实验报告.doc

    哈希表是一种高效的数据结构,它通过哈希函数将数据的关键字映射到一个固定大小的数组中,以此实现快速的查找、插入和删除操作。本实验的目的在于掌握哈希函数的设计方法,理解处理冲突的策略,以及学习如何在哈希表...

    Java语言程序设计课件第四章 数组、字符串、向量和哈希表

    在Java语言程序设计中,数组、字符串、向量和哈希表是处理集合数据的重要结构。本章节将详细介绍这些概念和它们的用法。 首先,数组是一种数据结构,它包含一系列相同类型的数据项,通过连续的内存地址进行存储。...

    哈希表的设计构造,关键字

    哈希表是一种在计算机科学中广泛使用的数据结构,它的核心思想是通过一种称为哈希函数的算法,将关键字(key)映射到一个固定大小的数组(也称为哈希表或散列表)中的特定位置,以此实现快速的查找、插入和删除操作...

    数据结构课程设计哈希表设计问题.doc

    - **系统分析及设计思路**:分析哈希表的基本原理,包括哈希函数的构造,以及如何处理哈希冲突(开放寻址法、链地址法等)。设计思路可能包括选择合适的哈希函数,确定冲突解决策略,以及考虑如何优化存储和查找...

Global site tag (gtag.js) - Google Analytics