Map的实现
来源:互联网 发布:mac appstore 换帐号 编辑:程序博客网 时间:2024/05/18 19:18
刚看完了Containers,为了加深认识,我自己写了一个专门针对String的Map,本想使代码比HashMap更快,没想到比HahhMap慢了不少,把代码给出来先,有时间再想想怎么提高效率
+-------------------------------------Code--------------------------------------------------+
import java.util.*;
class Members
{
static int id=0;
String key;
String value;
Members(String key,String value){
this.key=key;
this.value=value;
id+=1;
}
public boolean equals(Object m){
boolean b=false;
if((m instanceof Members)&&(((Members)m).key!=null)){
if(key==((Members)m).key)
b=true;
}
if((m instanceof Members)&&(value==((Members)m).value))
b=true;
return b;
}
public String toString(){
return "key"+key+"value"+value;
}
public String getValue(){
return this.value;
}
}
public class MyMap
{
int SZ=100;
ArrayList[] bucket=new ArrayList[SZ];
public String put(String key,String value){//ok
String result=null;
int index=key.hashCode()%SZ;
if(index<0)index=-index;
if(bucket[index]==null)
bucket[index]=new ArrayList();
ArrayList al=bucket[index];
ListIterator li=al.listIterator();
Members mem=new Members(key,value);
boolean find=false;
while(li.hasNext()){
Members im=(Members)li.next();
if(im.equals(mem)){
result=im.getValue();
li.set(mem);
find=true;
break;
}
}
if(!find)
bucket[index].add(mem);
return result;
}
public boolean containsKey(String key){//ok
boolean b=false;
int index=key.hashCode()%SZ;
if(index<0)index=-index;
if(bucket[index]==null)
return b;
ArrayList al=bucket[index];
ListIterator li=al.listIterator();
Members ikey3=new Members(key ,null);
while(li.hasNext()){
Members ikey2=(Members)li.next();
if (ikey2.equals(ikey3))
b=true;
}
return b;
}
public boolean containsValue(String value){//ok
boolean b=false;
Members ikey4=new Members(null,value);
for(int i=0;i<bucket.length;i++){
if(bucket[i]!=null){
ListIterator fli=bucket[i].listIterator();
while(fli.hasNext()){
Members ikey5=(Members)fli.next();
if(ikey5.equals(ikey4))
b=true;
}
}
}
return b;
}
public void clear(){//ok
for(int i=0;i<bucket.length;i++){
if(bucket[i]!=null)
bucket[i]=new ArrayList();
}
}
public String get(String key){//ok
String re=null;
Members mm=new Members(key,null);
int index=key.hashCode()%SZ;
if(index<0)index=-index;
ListIterator gli=bucket[index].listIterator();
while(gli.hasNext()){
Members m=(Members)gli.next();
if(mm.equals(m))
re=m.getValue();
}
return re;
}
public String remove(String key){//ok
String re=null;
int index=key.hashCode()%SZ;
Members mm=new Members(key,null);
if(index<0)index=-index;
ListIterator rli=bucket[index].listIterator();
while(rli.hasNext()){
Members m=(Members)rli.next();
if(mm.equals(m))
re=m.getValue();
m.value=null;
}
return re;
}
public int size(){//ok
int size=0;
for(int i=0;i<bucket.length;i++){
if(bucket[i]!=null){
ListIterator sli=bucket[i].listIterator();
while(sli.hasNext()){
Members next=(Members)sli.next();
size+=1;
}
}
}
return size;
}
public Set entrySet(){//ok
HashSet set=new HashSet();
for(int i=0;i<bucket.length;i++){
if(bucket[i]!=null){
ListIterator sli=bucket[i].listIterator();
while(sli.hasNext()){
Members next=(Members)sli.next();
set.add(new Members(next.key,next.value));
}
}
}
return set;
}
public Set keySet(){//ok
HashSet set=new HashSet();
for(int i=0;i<bucket.length;i++){
if(bucket[i]!=null){
ListIterator sli=bucket[i].listIterator();
while(sli.hasNext()){
Members next=(Members)sli.next();
set.add(next.key);
}
}
}
return set;
}
public Collection values(){//ok
ArrayList values=new ArrayList();
for(int i=0;i<bucket.length;i++){
if(bucket[i]!=null){
ListIterator sli=bucket[i].listIterator();
while(sli.hasNext()){
Members next=(Members)sli.next();
values.add(next.value);
}
}
}
return values;
}
public void putAll(Map m){//ok
Iterator it=m.entrySet().iterator();
while(it.hasNext()){
Map.Entry me=(Map.Entry)it.next();
put((String)me.getKey(),(String)me.getValue());
}
}
}
+-------------------------------------Code--------------------------------------------------+
import java.util.*;
class Members
{
static int id=0;
String key;
String value;
Members(String key,String value){
this.key=key;
this.value=value;
id+=1;
}
public boolean equals(Object m){
boolean b=false;
if((m instanceof Members)&&(((Members)m).key!=null)){
if(key==((Members)m).key)
b=true;
}
if((m instanceof Members)&&(value==((Members)m).value))
b=true;
return b;
}
public String toString(){
return "key"+key+"value"+value;
}
public String getValue(){
return this.value;
}
}
public class MyMap
{
int SZ=100;
ArrayList[] bucket=new ArrayList[SZ];
public String put(String key,String value){//ok
String result=null;
int index=key.hashCode()%SZ;
if(index<0)index=-index;
if(bucket[index]==null)
bucket[index]=new ArrayList();
ArrayList al=bucket[index];
ListIterator li=al.listIterator();
Members mem=new Members(key,value);
boolean find=false;
while(li.hasNext()){
Members im=(Members)li.next();
if(im.equals(mem)){
result=im.getValue();
li.set(mem);
find=true;
break;
}
}
if(!find)
bucket[index].add(mem);
return result;
}
public boolean containsKey(String key){//ok
boolean b=false;
int index=key.hashCode()%SZ;
if(index<0)index=-index;
if(bucket[index]==null)
return b;
ArrayList al=bucket[index];
ListIterator li=al.listIterator();
Members ikey3=new Members(key ,null);
while(li.hasNext()){
Members ikey2=(Members)li.next();
if (ikey2.equals(ikey3))
b=true;
}
return b;
}
public boolean containsValue(String value){//ok
boolean b=false;
Members ikey4=new Members(null,value);
for(int i=0;i<bucket.length;i++){
if(bucket[i]!=null){
ListIterator fli=bucket[i].listIterator();
while(fli.hasNext()){
Members ikey5=(Members)fli.next();
if(ikey5.equals(ikey4))
b=true;
}
}
}
return b;
}
public void clear(){//ok
for(int i=0;i<bucket.length;i++){
if(bucket[i]!=null)
bucket[i]=new ArrayList();
}
}
public String get(String key){//ok
String re=null;
Members mm=new Members(key,null);
int index=key.hashCode()%SZ;
if(index<0)index=-index;
ListIterator gli=bucket[index].listIterator();
while(gli.hasNext()){
Members m=(Members)gli.next();
if(mm.equals(m))
re=m.getValue();
}
return re;
}
public String remove(String key){//ok
String re=null;
int index=key.hashCode()%SZ;
Members mm=new Members(key,null);
if(index<0)index=-index;
ListIterator rli=bucket[index].listIterator();
while(rli.hasNext()){
Members m=(Members)rli.next();
if(mm.equals(m))
re=m.getValue();
m.value=null;
}
return re;
}
public int size(){//ok
int size=0;
for(int i=0;i<bucket.length;i++){
if(bucket[i]!=null){
ListIterator sli=bucket[i].listIterator();
while(sli.hasNext()){
Members next=(Members)sli.next();
size+=1;
}
}
}
return size;
}
public Set entrySet(){//ok
HashSet set=new HashSet();
for(int i=0;i<bucket.length;i++){
if(bucket[i]!=null){
ListIterator sli=bucket[i].listIterator();
while(sli.hasNext()){
Members next=(Members)sli.next();
set.add(new Members(next.key,next.value));
}
}
}
return set;
}
public Set keySet(){//ok
HashSet set=new HashSet();
for(int i=0;i<bucket.length;i++){
if(bucket[i]!=null){
ListIterator sli=bucket[i].listIterator();
while(sli.hasNext()){
Members next=(Members)sli.next();
set.add(next.key);
}
}
}
return set;
}
public Collection values(){//ok
ArrayList values=new ArrayList();
for(int i=0;i<bucket.length;i++){
if(bucket[i]!=null){
ListIterator sli=bucket[i].listIterator();
while(sli.hasNext()){
Members next=(Members)sli.next();
values.add(next.value);
}
}
}
return values;
}
public void putAll(Map m){//ok
Iterator it=m.entrySet().iterator();
while(it.hasNext()){
Map.Entry me=(Map.Entry)it.next();
put((String)me.getKey(),(String)me.getValue());
}
}
}
- Map的实现
- JavaScript实现的Map
- js实现的Map
- 实现自已的Map
- JS实现的MAP
- Map的底层实现
- JavaScript Map的实现
- JS实现的MAP
- 我的Map实现
- map的lisp实现
- Javascript的map实现
- 浅谈Map的实现
- Map的实现类
- Set 到 Map的扩展--- 实现map
- std::map 的 inserter 实现
- Google Map GEvent 的实现
- 使用红黑树实现的map
- map/reduce的简单实现
- 唐僧在如来面前吐真言(转载)
- 11月14日 超兴奋后的超级郁闷
- 在Eclipse中使用SWT进行界面设计
- 论取经途中孙悟空为什么屡战屡败之真正原因(转贴)
- ASP.NET GET 方式提交数据!
- Map的实现
- ASP.NET POST方式提交数据!
- 跨站Script攻击 Author: Hoky.pRo
- 兰陵王•柳阴直
- SQL注入路径问题 作者:孤光剑隐
- 第一次使用Blog
- 什么是webservicse, 作什么用的
- ADO.Net:从DataReader中获取数据表的Schema信息
- 反思