`
chrnc
  • 浏览: 9603 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

javascript 实现 Hashtable ArrayList StringBuffer

阅读更多
Hashtable  ArrayList 并不是javascript 固有的类,但是我们可以模拟一个
下面的code用起来会是这样 :
var table = new HashTable();
table.put(jsObjKey,jsObjValue);

var arrayList = new ArrayList();
arrayList.add(jsObj);

...
arrayList.size();



等等,相信看一下都能知道,这个模拟出来的Hashtable 和ArrayList 和java的十分相似,基本上在java里面怎么用的,在js里面我们就可以怎么用。


源代码:
// StringBuffer.
function StringBuffer(){
	this.array = new Array();
}

StringBuffer.prototype.append = function (content){
	this.array[eval(this.array.length)] = content;	
}

StringBuffer.prototype.toString  = function (){
	return this.array.join("");
}



// ArrayList.

function ArrayList(){
 this.index = -1;
 this.array = new Array(); 
}
ArrayList.prototype.add = function (obj){
	this.index = this.index + 1;
	this.array[eval(this.index)] = obj;
}
ArrayList.prototype.get = function (index){return this.array[eval(index)];}
ArrayList.prototype.size = function (){return this.index+1;}
ArrayList.prototype.remove = function (index){
	var j = 0;
	var arrThis = this.array; 
	var arrTemp = new Array();
	for(w=0;w<arrThis.length;w++){
		if (eval(index)!=eval(w)) {
			arrTemp[j] = arrThis[w];	
			j++;
		}	
	}	
	this.array = arrTemp;
	this.index = eval(j-1); 
}





// HashTable Object 注意哦,T 可是大些的

function HashTable(){
 this.arrValues = new ArrayList(); 
}

function HashTable_Map(){
	var key = null;  
	var value = null; 
}

HashTable.prototype.put = function (objKey,objValue){
	var isAdd = true;
	var arrThis = this.arrValues;	
	for(i=0;i<arrThis.size();i++){
		var map = arrThis.get(i);
		if (map.key==objKey){
			map.value = objValue;
			isAdd = false;
		}
	}
	if (isAdd){
		var Map = new HashTable_Map();
		Map.key = objKey;
		Map.value = objValue;
		this.arrKeys = objKey;
		this.arrValues.add(Map);
	}
}

HashTable.prototype.get = function (objKey){
	var arrThis = this.arrValues;	
	for(i=0;i<arrThis.size();i++){
		var map = arrThis.get(i);
		if (map.key==objKey) return map.value;
	}
	return null;
}

HashTable.prototype.keys = function (){
	var arrKeys = new Array();
	var arrThis = this.arrValues;	
	for(i=0;i<arrThis.size();i++){
		var map = arrThis.get(i);
		arrKeys[i] = map.key;
	}
	return arrKeys;	
}

HashTable.prototype.remove =  function (objKey){
	for(i=0;i<this.arrValues.size();i++){
		var map = this.arrValues.get(i);
		if (objKey == map.key){
			this.arrValues.remove(i);
		}
	}
}




分享到:
评论
2 楼 torycatkin 2008-12-22  
我觉得这个和js 的Array没啥区别啊。。用Array做数据存储的容器。
我个人认为,可以写一个HashMap的对象,存储只用一个自定义的原型,比如:
function HashMap(){
   var cont = {};
   this.put = function(key,value){
     cont[key] = value;
  }
  this.get = function(key){
   return cont[key];
  }
}
1 楼 liushouzhao 2008-12-12  
chrnc 写道
Hashtable  ArrayList 并不是javascript 固有的类,但是我们可以模拟一个
下面的code用起来会是这样 :
var table = new HashTable();
table.put(jsObjKey,jsObjValue);

var arrayList = new ArrayList();
arrayList.add(jsObj);

...
arrayList.size();



等等,相信看一下都能知道,这个模拟出来的Hashtable 和ArrayList 和java的十分相似,基本上在java里面怎么用的,在js里面我们就可以怎么用。


源代码:
// StringBuffer.
function StringBuffer(){
	this.array = new Array();
}

StringBuffer.prototype.append = function (content){
	this.array[eval(this.array.length)] = content;	
}

StringBuffer.prototype.toString  = function (){
	return this.array.join("");
}



// ArrayList.

function ArrayList(){
 this.index = -1;
 this.array = new Array(); 
}
ArrayList.prototype.add = function (obj){
	this.index = this.index + 1;
	this.array[eval(this.index)] = obj;
}
ArrayList.prototype.get = function (index){return this.array[eval(index)];}
ArrayList.prototype.size = function (){return this.index+1;}
ArrayList.prototype.remove = function (index){
	var j = 0;
	var arrThis = this.array; 
	var arrTemp = new Array();
	for(w=0;w<arrThis.length;w++){
		if (eval(index)!=eval(w)) {
			arrTemp[j] = arrThis[w];	
			j++;
		}	
	}	
	this.array = arrTemp;
	this.index = eval(j-1); 
}





// HashTable Object 注意哦,T 可是大些的

function HashTable(){
 this.arrValues = new ArrayList(); 
}

function HashTable_Map(){
	var key = null;  
	var value = null; 
}

HashTable.prototype.put = function (objKey,objValue){
	var isAdd = true;
	var arrThis = this.arrValues;	
	for(i=0;i<arrThis.size();i++){
		var map = arrThis.get(i);
		if (map.key==objKey){
			map.value = objValue;
			isAdd = false;
		}
	}
	if (isAdd){
		var Map = new HashTable_Map();
		Map.key = objKey;
		Map.value = objValue;
		this.arrKeys = objKey;
		this.arrValues.add(Map);
	}
}

HashTable.prototype.get = function (objKey){
	var arrThis = this.arrValues;	
	for(i=0;i<arrThis.size();i++){
		var map = arrThis.get(i);
		if (map.key==objKey) return map.value;
	}
	return null;
}

HashTable.prototype.keys = function (){
	var arrKeys = new Array();
	var arrThis = this.arrValues;	
	for(i=0;i<arrThis.size();i++){
		var map = arrThis.get(i);
		arrKeys[i] = map.key;
	}
	return arrKeys;	
}

HashTable.prototype.remove =  function (objKey){
	for(i=0;i<this.arrValues.size();i++){
		var map = this.arrValues.get(i);
		if (objKey == map.key){
			this.arrValues.remove(i);
		}
	}
}





很好的封装

相关推荐

    java_面试题笔记

    - **StringBuilder**:与 StringBuffer 类似,但不支持线程安全,因此在单线程环境中比 StringBuffer 性能更高。推荐在不需要线程安全的场景下使用。 3. **字符串分割函数** - **实现逻辑**:提供的代码示例展示...

    java面试题-读书笔记-面试失败一次就记录一次的坑-不知不觉已经这么多了.docx

    - **存储结构**:Vector和ArrayList基于动态数组实现,适合随机访问,而LinkedList基于双向链表,适合顺序访问和插入删除操作。 - **线程安全性**:Vector是线程安全的,每个方法都进行了同步处理;ArrayList和...

    java基础面试题目大全, 合适JAVA面试的程序员

    3. **Vector与ArrayList、Hashtable与HashMap**:Vector和ArrayList都是动态数组,但Vector线程安全,ArrayList线程不安全。Hashtable是线程安全的字典,而HashMap不是,HashMap提供更快的查找速度。 4. **Iterator...

    于笑扬java综合知识点总结-必背(吐血推荐).doc

    Hashtable和HashMap都是Java中的哈希表实现,但它们有不同的特点: * Hashtable:线程安全,同步锁机制,key和value不能为null * HashMap:不是线程安全的,但性能高于Hashtable,key和value可以为null 六、九大...

    java面试题

    - `HashMap`和`Hashtable`都是基于哈希表实现的键值对存储结构,但它们之间存在一些关键性的不同: - `Hashtable`是线程安全的,所有方法都进行了同步处理,而`HashMap`是非线程安全的。 - `HashMap`允许使用`...

    BJ IT公司面试题集

    - **Thread 实现**:通过继承 `Thread` 类实现多线程。 - **Runnable 接口**:实现 `Runnable` 接口,将具体的线程任务分离出来。 - **Synchronized 关键字**:实现线程间的同步控制。 - `wait()` 和 `notify()` ...

    阿里巴巴Java方向面试题汇总(含答案).docx

    - **ArrayList** 是基于动态数组实现的列表,提供快速的随机访问,但插入和删除元素在中间位置时效率较低。 - **LinkedList** 是双向链表实现,适合于频繁的插入和删除操作,但随机访问速度慢。 3. **HashTable, ...

    Java开发工程师试卷六(~).doc

    Java开发工程师试卷六包含了多个Java编程相关的问题,涵盖了反射、多线程、ExecutorService接口、JavaScript语法、数据类型、线程安全、Bean作用域、Map容器、同步关键字以及HashMap和HashTable的区别等多个知识点。...

    JAVA面试题集(150道经典面试题)

    - **历史背景**:`Hashtable` 是基于早期的 `Dictionary` 类实现的,而 `HashMap` 则是 Java 1.2 版本引入的。 - **线程安全性**:`Hashtable` 是线程安全的,而 `HashMap` 不是。 - **允许 null 键/值**:`HashMap`...

    java面试题集锦

    - **知识点概述**:`HashMap` 和 `Hashtable` 都是 Java 中实现 Map 接口的类,但它们之间存在一些重要的区别。 - **应用场景**:了解这些区别有助于在实际开发中作出更合理的选择。 - **解答要点**: - **线程...

    java总结,问题,知识点

    Ajax(Asynchronous JavaScript and XML)实现了局部刷新,通过JavaScript异步发送XMLHttpRequest请求,更新部分网页内容,提高用户体验。 13. JSP的四大作用域: - page:仅限当前JSP页面,生命周期短。 - ...

    java知识点总结java知识点总结.doc

    - List接口,有序可重复,常见实现如ArrayList和LinkedList。 - Set接口,无序不可重复,如HashSet和TreeSet。 - Collections是集合框架的工具类,提供各种静态方法操作集合。 15. Java的基本数据类型 Java有八...

    java面试题(整理)

    6. **JavaScript实现的目标** JavaScript的目标在于使网页具有交互性。 7. **如何用Javascript得到标签的名字** 使用`nodeName`属性获取元素的标签名。 #### 四、Struts相关 1. **描述一下Struts的工作方式?...

    java笔试面试题汇总 基础版 最新 最全

    - **ArrayList**:基于数组实现的列表,适用于随机访问元素的场景。 - **Vector**:与`ArrayList`类似,但`Vector`是线程安全的,适用于多线程环境。 - **LinkedList**:基于双向链表实现,插入和删除操作比基于...

    Java软件工程师面试题

    - **ArrayList**:基于数组实现的列表,适合随机访问元素。 - **Vector**:与`ArrayList`类似,但是线程安全的。 - **LinkedList**:基于链表实现的列表,适合插入和删除操作。 ##### 11. EJB的组成部分及其功能 -...

    深圳技术搜集(1).docx

    11. 容器:ArrayList和LinkedList分别代表动态数组和链表实现,各有适用场景。HashSet和HashMap是基于哈希表的集合,HashSet不允许重复元素,HashMap存储键值对。 12. 单例模式:保证类只有一个实例,常用于配置...

    J2EE高性能编程

    ArrayList和LinkedList都是常用的列表实现,但在不同场景下它们的性能差异显著: - **ArrayList**:基于数组实现,适用于随机访问场景,如`get()`和`set()`操作。当需要频繁地进行此类操作时,ArrayList的性能更佳...

    java面试宝典

    116、JavaScript中的对象. 25 117、function的用法 26 118、对象的继承 27 119、this的用法 29 120、Array in JavaScript 29 121、jsp有哪些内置对象?作用分别是什么? 31 122、jsp有哪些动作?作用分别是什么? 31 123...

    阿里巴巴 面经

    - `HashTable`内部实现方法的同步,确保每次只有一个线程可以访问。 **17. ArrayList与Vector的区别** - **线程安全**:`Vector`的所有方法都是同步的,而`ArrayList`不是。 - **性能**:`ArrayList`通常比`Vector...

Global site tag (gtag.js) - Google Analytics