更高效的哈希表

时间:2015-05-17 14:59:04

标签: java key hashtable

我正在构建一个哈希表,其中共享相同Byte数组值的多个String键被合并为一个具有多个键的值。这样,不会使用不同的值反复存储该值。添加带有值的键也应该覆盖任何具有相同名称的现有键,但如果它具有不同的键,则保留该值,但在没有其他键时将其删除。

编辑:如何构建此数据结构?例如,如果我用值插入“hello”,然后添加具有相同值的“World”,我希望结构为[[Hello,World],Value]而不是[Hello,Value] ,[世界,价值]。我尝试使用列表作为我的哈希键,但发现我无法回想起这个值。这是我的代码:

HashMap<List<String>, byte[]> map = new HashMap<List<String>, byte[]>();

public void storeByte (String id, int value) {
      byte[] byteValue = new byte[value];
      ArrayList<String> idlist = new ArrayList<String>();
      idlist.add(id);
      map.put(idlist, byteValue);
      System.out.println(map);
  }

 public byte[] fetchByte(String id) {
      ArrayList<String> idlistsearch = new ArrayList<String>();
      idlistsearch.add(id);
      byte[] output = map.get(id);
      if(map.containsKey(idlistsearch)){
          output = map.get(id);
          } else {
              return null;
          } 
      return output;

我希望这是有道理的,

谢谢。

1 个答案:

答案 0 :(得分:0)

  

我希望构建一个哈希表,其中共享相同Byte数组值的多个String键被合并为一个具有多个键的值。

这就是HashMap和Hashtable的工作原理。内置任何其他选项都没有。

定义时

byte[] bytes =

这是一个参考,而不是一个实际的对象。当您将此引用添加到地图时,您将添加此引用,并且可以根据需要添加多次,但只有一个副本。

  

如果我插入&#34;你好&#34;有价值,然后添加&#34;世界&#34;具有相同的值,

你可以做到

byte[] bytes =
map.put("Hello", bytes);
map.put("World", bytes);

这是两个键,只有一个值。