* java版HashMap,大数据量时效率很低,建议1000条数据以下使用
来源:互联网 发布:大数据分析道与术 编辑:程序博客网 时间:2024/06/05 17:17
/*
* java版HashMap,大数据量时效率很低,建议1000条数据以下使用
*/
function HashMap(){
var DEFAULT_CAPACITY=16;
var MAX_CAPACITY=2147483647;
var DEFAULT_LOAD_FACTOR=0.75;
/************ splitline ***************/
var loadFactor=DEFAULT_CAPACITY;
var threshold=DEFAULT_CAPACITY*DEFAULT_LOAD_FACTOR*1;
//entry table
var entryTable=new Array(DEFAULT_CAPACITY);
var size=0;
/**
* return null if no key exists, else return the newValue replaced..
*/
this.put=function(key,val){
if(key!=null){
var hash=newHash(hashCode(key));
var i=indexFor(hash,entryTable.length);
for(var obj=entryTable[i];obj!=null;obj=obj.next){
if(obj.hash==hash &&obj.key==key ){
var oldVal=obj.val;
obj.val=val;
return oldVal;
}
}
addEntry(hash,key,val,i);
return null;
}
};
/**
* remove the key element
*/
this.remove=function(key){
if(key!=null){
var hash=newHash(hashCode(key));
var i=indexFor(hash,entryTable.length);
var prev = entryTable[i];
var e = prev;
while (e != null) {
var next = e.next;
if (e.hash == hash && key==e.key) {
size--;
if (prev == e)
entryTable[i] = next;
else
prev.next = next;
if(e!=null)
return e.val;
}
prev = e;
e = next;
}
}
};
this.get=function(key){
if(key!=null){
var hash=newHash(hashCode(key));
var i=indexFor(hash,entryTable.length);
for(var obj=entryTable[i];obj!=null;obj=obj.next){
if(obj.hash==hash && obj.key==key ){
return obj.val;
}
}
}
};
this.containsKey=function(key){
if(key!=null){
var hash=newHash(hashCode(key));
var i=indexFor(hash,entryTable.length);
for(var obj=entryTable[i];obj!=null;obj=obj.next){
if(obj.key==key && obj.hash==hash ){
return true;
}
}
}
return false;
};
this.containsValue=function(value){
if(value!=null){
var tab = entryTable;
for (var i = 0; i < tab.length ; i++)
for (var e = tab[i] ; e != null ; e = e.next)
if (value.equals(e.val))
return true;
}
return false;
}
this.size=function(){
return size;
};
this.getkeylist=function(){
var tmpKey=new Array();
for(var i=0;i<entryTable.length;i++){
for(var obj=entryTable[i];obj!=null;obj=obj.next){
tmpKey.push(obj.key);
}
}
return tmpKey;
};
this.clear=function(){
//modCount++;
var t=entryTable;
for(var i=0;i<entryTable.length;i++)
t[i]=null;
size=0;
}
function addEntry(h,k,v,index){
var entry=entryTable[index];
var item={"hash":h,"key":k,"val":v,"next":entry};
entryTable[index]=item;
if(size++>=threshold){
resize(2*entryTable.length);
}
//alert(index+","+entryTable[index].next.hash);
};
function resize(newCapacity){
var newTable=new Array(newCapacity);
transfer(newTable);
entryTable=newTable;
threshold=newCapacity*loadFactor*1;
};
function transfer(newTable) {
var src = entryTable;
var newCapacity = newTable.length;
for (var j = 0,len=src.length; j <len; j++) {
var e = src[j];
if (e != null) {
src[j] = null;
do {
var next = e.next;
var i = indexFor(e.hash, newCapacity);
e.next = newTable[i];
newTable[i] = e;
e = next;
} while (e != null);
}
}
};
function indexFor(h,len){
return h&(len-1);
};
function newHash(h){
h += ~(h << 9);
h ^= (h >>> 14);
h += (h << 4);
h ^= (h >>> 10);
return h;
};
function hashCode(str){
var h = 0, off = 0;
var len = str.length;
for(var i = 0; i < len; i++){
var tmp=str.charCodeAt(off++);
h = 31 * h + tmp;
if(h>0x7fffffff || h<0x80000000){
h=h & 0xffffffff;
}
}
return h;
};
}
- * java版HashMap,大数据量时效率很低,建议1000条数据以下使用
- 7条小建议,助你更好使用大数据!
- 大数据量并发建议
- 大数据量数据优化
- 如何导入导出大数据量(1000万条)的表?
- 如何导入导出大数据量(1000万条)的表
- 大数据量使用总结
- 使用Java异常的几条建议
- Oracle大数据量数据生成器Data Generator的使用
- Oracle大数据量数据生成器Data Generator的使用
- 使用Tippecanoe工具处理大数据量的矢量数据切片
- JAVA导出数据到excel中大数据量的解决方法
- JAVA导出数据到excel中大数据量的解决方法
- java :database 大数据量数据的插入/更新操作 solution
- JAVA导出数据到excel中大数据量的解决方法
- Java两表数据大数据量比对
- 大数据量数据全部查询(Java+MySQL)
- 使用大数据的一些建议
- Nginx 的 server_names_hash_bucket_size 问题
- 用 jQuery写的可编辑的表格
- Visual C++操纵MS Word
- 九选三不及格,心情沉痛ing
- Linux设备驱动开发学习步骤
- * java版HashMap,大数据量时效率很低,建议1000条数据以下使用
- git使用总结
- 网管工具之cacti
- linux双向链表分析之list_del中的技巧
- Flex命名空间解说
- C#设计模式之17——迭代器模式
- MySQL 修改AUTO_INCREMENT的值
- 用 MDX 创建时间命名集总结 SSAS
- NIO应用