wxwx123244 2014-12-12 12:56 采纳率: 0%
浏览 1678

关于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;

}

}

要求让存储区里的数组可以动态扩展,当项数多于存储区数一半时,重新散列操作。

  • 写回答

1条回答

  • devmiao 2014-12-12 16:39
    关注

    你可以参照Java里面的HashMap源代码

    评论

报告相同问题?

悬赏问题

  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真