刚看完了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());
}
}
}