Map的实现
2004-11-14 22:28
435 查看
刚看完了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());
}
}
}
相关文章推荐
- ATL实现Connection Point的一种简单的方法
- PHP 的 MySQL 操作类,跟手册上的函数一样用,但是更方便了。多说无益,看了就知道了。
- Java测试规范(引用)
- oracle中的分页
- Java面试题目
- delphi中的时间操作技术(2)
- 解析IP地址为主机域名
- 将某一主机域名解析为IP地址
- 有关TrueDBGrid的问题向各位大虾请教
- 力争最简单把*、&说清楚
- 一个画图类,类似ms_chart的线图,适用于科学仿真数据分析(一)
- 怎样为任何控件和区域添加提示信息:用自己封装的CTip类
- 从注册表中还原MSNMessenger口令
- 使用C#开发COM+组件
- 从数据库中动态选取下拉列表的方法
- Decal SDL-Delphi的范型类库-通用数据结构与算法类库(一)
- thinking in c++ 卷2
- 初学者的问题----csdn系列
- Netscaler数据索引String Map与Pattern Set的区别