【问题标题】:Modifying value in Hashtable修改 Hashtable 中的值
【发布时间】:2015-05-19 02:51:45
【问题描述】:

您好,当两个键相等时,我在修改哈希表中的某个值时遇到问题。

我定义了我的哈希表,

Hashtable<String, Integer> hash = new Hashtable<String, Integer>();

我的程序用.put() 方法填充了一些数据。

注意:第一列代表十六进制值

08 86
AA 10
FF 330
2A 54
E1 60

我可以使用if(hash.containsKey(string x)){} 检查字符串是否重复。如果我想在哈希表中插入另一个数据,但使用相同的字符串hash.put("AA", 77); 我根本不知道如何将哈希表中的值与我的新值相加,并且哈希表没有重复字符串。这意味着我最终的 hastable 看起来也一样

08 86
AA 87
FF 330
2A 54
E1 60

有什么建议吗?

【问题讨论】:

  • 我只是想知道你想要做什么的意义何在?
  • 我有一个任务,我必须分析网络数据包。我想知道哪个 IP 地址发送的字节数最多,我开始使用哈希表来映射它们。如果我得到 2 个相同的 IP 地址,我想将它们发送的总字节数相加。我以十六进制代码(第一列)及其总字节数(第二列)跟踪我的 IP 地址。 Hashtable 可能不是最好的选择,但是,哦,好吧..
  • 好问题,请将此解释添加到您的帖子中,以便其他人可以理解您的目标或可能为您建议更好的数据结构

标签: java dictionary hashtable


【解决方案1】:
String yourKey = "AA";
int val = 77;
if (hashtable.containsKey(yourKey))
    val += hashtable.get(yourKey));
hashtable.put(yourKey, val);

这会检查重复项,如果有,则将原始值添加到表中

【讨论】:

  • 谢谢先生,看来您已经解决了我的问题。
  • @Toesmash 没问题 :)
【解决方案2】:

您可以将 HashTable 更改为 HashMap&lt;String, Integer&gt; (http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html),因为 HashMap 的放置不会添加新键:

将指定的值与此映射中的指定键相关联。如果 映射先前包含键的映射,旧值是 替换

【讨论】:

    【解决方案3】:

    您可以更改您的 Hashtable 以包含一个数组或整数列表并提供您自己的 put 方法:

    Hashtable<String, List<Integer>> hash = new Hashtable<String, List<Integer>>();
    
    public void put(String key, Integer i) {
      if (hash.containsKey(key)) {
        List l = hash.get(key);
        if (l == null) {
          l = new ArrayList<Integer>();
          hash.put(key, l);
        }
        if (!l.contains(i)) {
          l.add(i);
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多