问题描述
- 关于java映射类一个问题
-
写了一个简易的映射类SimpleStringMap,代码如下:public class SimpleStringMap {
public SimpleStringMap(){ bucketArray = new HashEntry[N_BUCKETS]; } public void put(String key, String value){ int bucket = Math.abs(key.hashCode())%N_BUCKETS; HashEntry entry = findEntry(bucketArray[bucket], key); if(entry==null){ entry=new HashEntry(key, value); entry.setLink(bucketArray[bucket]); bucketArray[bucket]=entry; }else{ entry.setValue(value); } } public String get(String key){ int bucket = Math.abs(key.hashCode())%N_BUCKETS; HashEntry entry = findEntry(bucketArray[bucket], key); if(entry==null){ return null; }else{ return entry.getValue(); } } public void delete(String key){ int bucket = Math.abs(key.hashCode())%N_BUCKETS; HashEntry entry = findEntry(bucketArray[bucket], key); if(entry!=null){ entry.deleteValue(); } } private HashEntry findEntry(HashEntry entry, String key){ while(entry!=null){ if(entry.getKey().equals(key)) return entry; entry=entry.getLink(); } return null; }
/* 常量*/
private static final int N_BUCKETS=7;/* 实例变量*/
private HashEntry[] bucketArray;
private int count;class HashEntry{ public HashEntry(String key, String value){ entryKey = key; } public String getKey(){ return entryKey; } public String getValue(){ return entryValue; } public void deleteValue(){ entryValue=null; } public void setValue(String value){ entryValue=value; } public HashEntry getLink(){ return entryLink; } public void setLink(HashEntry nextEntry){ entryLink = nextEntry; }
/* 实例变量*/
private String entryKey;private String entryValue;
private HashEntry entryLink;
}
}
要求让存储区里的数组可以动态扩展,当项数多于存储区数一半时,重新散列操作。
解决方案
你可以参照Java里面的HashMap源代码
时间: 2024-07-31 05:39:29