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 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看