`
mox_sir
  • 浏览: 35568 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于JavaScript的HashMap实现

阅读更多
[size=small]
/**
*author:yangsenc
*time:20140920
*version:V1.0.0
*/
function HashMap(){
//特殊关键字(specialKey)用来处理特殊的保留字
//这些保留字主要是Object对象中的固有属性和方法
var specialKey = [
'valueOf',
'constructor',
'toString',
'toLocaleString',
'ropertyIsEnumerable',
'hasOwnProperty',
'isprototypeOf',
'prototype'
];
//为特殊关键字提供单独存放值的空间
var speicalValue = new Array(specialKey.length);

//特殊关键字存取标记,true 表示该位已经有值
var speicalFlag = new Array(specialKey.length);

//存放普通的关键字,只需要一个普通的Object
var normalHashMap={};

//将数值插入到HashMap
this.put = function(key,value){
if(!key){
return false;
}
//处理特殊关键字
for(var i=0;i<specialKey.length;i++){
if(key==specialKey[i]){//如果关键字等于某个特殊关键字
speicalValue[i] = value;
speicalFlag[i] = true;
return true;
}
}

//处理普通关键字
normalHashMap[key] = value;
return true;
}

this.get = function(key){
if(!key){
return null;
}
//先处理特殊关键字
for(var i=0;i<specialKey.length;i++){
if(key == specialKey[i]){
if(speicalValue[i]){
return speicalValue[i];
}else{
return null;
}
}
}

if(key in normalHashMap){
return normalHashMap[key];
}else{
return null;
}
}

//清空HashMap
this.clear = function(){
speicalValue  = new Array(specialKey.length);
speicalFlag   = new Array(specialKey.length);
normalHashMap = {};
}


//判断是否包含key
this.containsKey = function(key){
//先处理特殊关键字
   for(var i=0;i<specialKey.length;i++){
   if(key == specialKey[i]){
   if(speicalFlag[i] == true){//和关键字相同并且关键字的标志位为true
   return true;
   }else{
   return false;
   }
   }
}
//处理普通关键字
if(key in normalHashMap){
return true;
}else{
return false;
}
}

//判断是否包含Value
this.containsValue = function(value){
if(!value){
return false;
}
var contains = false;
for(var i=0;i<speicalValue.length;i++){
var v = speicalValue[i];
if(v == value){
contains = true;
break;
}
}

if(contains){
return contains;
}

for(var key in normalHashMap){
var v = normalHashMap[key];
if(v == value){
contains = true
break;
}
}
return contains;
}

//返回hashMap的长度
this.size  = function(){
var size = 0;

for(var i=0;i<speicalValue.length;i++){
if(speicalFlag[i] == true ){
size++;
}
}

for(var key in normalHashMap){
size++;
}
return size;
}

//判断hashMap是否为空
this.isEmpty = function(){
return this.size() == 0 ? true:false;
}


//根据一个key删除元素
this.remove = function(key){
if(!key){
return false;
}

for(var i=0;i<specialKey.length;i++){
if(key ==specialKey[i] && speicalFlag[i] == true ){
speicalFlag[i] = null;
speicalValue[i] = null;
return true;
}else if(key ==specialKey[i] && speicalFlag[i] == false){
return false;
}
}

for(var k in normalHashMap){
if(k == key){
delete normalHashMap[k];
return true;
}
}
return false;
}



//取得Key值
this.keySet = function(){
return getStr(0);
}

//toString 方法
//{phoneNo=18510802350, userName=yangsenc}
this.toString = function(){
return getStr(1);
}

//返回类似java中Map的entrySet
//[phoneNo=18510802350, userName=yangsenc]
this.entrySet = function(){
return getStr(2);
};

//取得所有的values
this.values = function(){
return getStr(3);
}

//公共方法,用于封装返回字符串
var getStr = function(flag){
//0: 中括号 返回keys
//1: 花括号 返回keys和values组合
//2: 中括号 返回keys和values组合
//3: 中括号 返回values
var result = "";

for(var i=0;i<specialKey.length;i++){
if(speicalValue[i] && speicalFlag[i] == true ){
if(flag == 0){
result += specialKey[i]+",";
}else if(flag == 3){
result += speicalValue[i]+",";
}else{
result += specialKey[i]+"="+speicalValue[i]+",";
}
}
}

for(var key in normalHashMap){
if(flag == 0){
result += key+",";
}else if(flag == 3){
result += normalHashMap[key]+",";
}else{
result += key+"="+normalHashMap[key]+",";
}
}

result = result.substring(0,result.length-1);
if(flag==1){
result = "{"+result+"}";
}else{
result = "["+result+"]";
}
return result;
}
}
/***********************测试****************************************/

function dwn(str){
  document.write(str +"</br>");
}

var hashMap = new HashMap();
hashMap.clear();
hashMap.put('valueOf','valueOf');
hashMap.put('constructor','constructor');
hashMap.put('toString','toString');
hashMap.put('key1','12345');
hashMap.put('key2','123456');
hashMap.put('key3',1234567);
hashMap.put('key4','12345678');
hashMap.put('key4','12345678');

dwn(hashMap.size());
hashMap.remove('toString');
dwn(hashMap.keySet());
dwn(hashMap.toString());
dwn(hashMap.entrySet());
dwn(hashMap.values());
[/size]
1
0
分享到:
评论
2 楼 mox_sir 2014-10-04  
zhaoshengbo 写道
咋没有散列值计算过程,这是hash map?

hashCode 真心不知道怎么算~~~

求指教!!
这只是类似的HashMap~~
1 楼 zhaoshengbo 2014-10-04  
咋没有散列值计算过程,这是hash map?

相关推荐

    一个基于js的HashMap

    以下是一个简单的JavaScript HashMap实现示例: ```javascript class HashMap { constructor(size = 53) { this.map = new Array(size); } hash(key) { let hash = 0; for (let i = 0; i ; i++) { hash += ...

    HashMap类

    HashMap类在Java编程...在阅读《HashMap1.js》和《HashMap.js》这两个文件时,可以深入分析其JavaScript版本的HashMap实现,虽然与Java版本可能有所不同,但基本的哈希映射原理是相通的,有助于拓宽对哈希表的理解。

    js 版 java hashmap

    7. **键的类型支持**:JavaScript的HashMap实现可能需要支持各种类型的键,包括字符串、数字、对象等,这就需要处理不同类型的键如何哈希和比较的问题。 8. **性能优化**:为了提高性能,可能需要对一些常见操作...

    前端开源库-hashmap

    `HashMap`是基于键值对存储的数据结构,其核心特性是通过哈希函数快速定位数据,实现O(1)的复杂度。 标题提到的“前端开源库-hashmap”是一个专门为JavaScript设计的`HashMap`实现,旨在为开发者提供一个高效且易于...

    基于Ajax的动态JavaScript文件加载模型.pdf

    然后,将该类与该类实现所需的JavaScript文件路径做HashMap关联。这样,最终实现了通过类名对应的字符串把类和类实现所用的JavaScript文件做了关联。 在实现过程中,需要使用Ajax异步请求来加载JavaScript文件。...

    JavaScript实现不同的计算机科学算法

    - **红黑树**:另一种自平衡二叉查找树,通过颜色属性保证一定的平衡性,用于实现高效的数据结构如Java的HashMap。 5. **动态规划** - **斐波那契数列**:使用备忘录或迭代/递归方法解决。 - **背包问题**:如0-...

    html js 用HashMap去掉html中select中的重复值

    这个方法适用于JavaScript环境,如果在服务器端使用Java处理,可以使用HashMap来实现相同的功能,只是代码会有所不同,因为Java处理DOM的操作不同于JavaScript。在Java中,你需要先解析HTML字符串,提取`&lt;select&gt;`...

    javascript中实现兼容JAVA的hashCode算法代码分享

    2. **JavaScript中的hashCode实现**:由于JavaScript中没有内置的hashCode方法,因此在需要在JavaScript中使用与Java相同的哈希值计算方式时,需要手动实现这个算法。根据文件中的描述,可以通过模拟Java的hashCode...

    JS hashMap实例详解

    JavaScript中的HashMap是一种基于键值对的集合,它允许开发者存储和操作键值对数据结构。在JavaScript中,虽然ES6引入了Map对象,但在ES6之前,开发者通常需要手动实现HashMap功能。接下来,我们将详细介绍如何在...

    JavaScript拼音搜索引擎

    JavaScript拼音搜索引擎是一种基于JavaScript实现的文本检索工具,主要用于在网页应用中提供实时的拼音匹配和搜索建议功能。这种搜索引擎的设计灵感来源于常见的搜索框输入提示,它能够根据用户输入的拼音,快速查找...

    华为OD真题含JavaScript实现代码.docx

    ### 华为OD真题解析:JavaScript实现代码 #### 1. 查找众数及中位数 **问题描述:** 题目要求从一个给定的一维整型数组中找到众数,并基于这些众数计算出新的数组的中位数。 **输入格式:** 输入为一个一维整型...

    React_HashMap_Visualizer

    ReactHashMapVisualizer是一个基于React的项目,用于可视化哈希映射的工作原理。它是一个很好的学习资源,特别是对于那些想要深入理解React开发流程以及JavaScript数据结构的初学者。在这个项目中,用户可以直观地...

    基于java实现一个酒店管理系统

    【基于Java实现一个酒店管理系统】是一个综合性的项目,它涵盖了软件工程中的多个核心知识点,主要集中在Java编程语言、数据库管理以及软件架构设计上。在这个系统中,开发者利用Java的面向对象特性、类库支持和强大...

    精选_基于JSP实现的校园师生交流系统_源码打包

    "精选_基于JSP实现的校园师生交流系统_源码打包" 这个标题揭示了我们讨论的核心内容,即一个专为校园环境设计的师生交流平台,该平台采用Java服务器页面(JSP)技术进行开发。"精选"一词暗示这是一个高质量或经过...

    基于纯js脚本的数学公式计算源码

    【标题】:“基于纯js脚本的数学公式计算源码”这一主题涉及到的是在Web开发中使用JavaScript实现的数学公式解析和计算功能。JavaScript是一种广泛应用于客户端浏览器的脚本语言,它允许开发者在用户交互时动态地...

    精选_基于Java和MySQL实现的大学生学籍管理系统_源码打包

    《基于Java和MySQL实现的大学生学籍管理系统》 在当今信息技术高速发展的时代,教育领域的信息化管理已经成为提升教学质量、优化管理效率的重要手段。本系统——“大学生学籍管理系统”就是这样一个利用Java编程...

    基于JAVA的网络通信系统的毕业设计,该系统将实现客户端和服务器之间的通信,并支持多用户同时在线

    本毕业设计旨在研究和开发一个基于JAVA的网络通信系统。该系统将实现客户端和服务器之间的通信,并支持多用户同时在线。以下是本设计的具体内容和代码实现。 ## 系统功能 该系统将具有以下功能: - 客户端和...

    基于Java+JSP的电子书系统毕业设计实现+源码毕业设计实现+源码.rar

    阅读部分可能使用AJAX(Asynchronous JavaScript and XML)实现页面无刷新加载,提供预览和下载选项。下载则需要处理文件流,确保文件完整且安全地传输给用户。 此外,安全性是任何Web应用都不能忽视的一环。此系统...

    JavaScript面试笔试题[文].pdf

    9. **线程安全**:JavaScript在浏览器环境中是单线程的,因此Vector和HashMap在JavaScript中不存在,且没有线程安全的考虑。但在Node.js服务端环境中,有一些库提供了线程安全的集合操作。 10. **异常处理**:当一...

Global site tag (gtag.js) - Google Analytics