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 怎么获取下面的: glove_word2id.json和 glove_numpy.npy 这两个文件
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug