【问题标题】:how to keep data stored into a hashtable - java如何将数据保存到哈希表中 - java
【发布时间】:2013-03-05 20:06:55
【问题描述】:

我有一个 Socket 服务器等待客户端以 json 格式发送消息。 我不需要将数据存储到数据库中,但现在,我想将它们保存在哈希表中。因此,当客户端发送消息时,服务器会将其添加到哈希表中,而不会丢失之前的消息。

这是我的哈希表的声明:

private static Hashtable<Integer,String> table = new Hashtable<Integer,String>();

这里是被称为消息到达服务器的方法:

    private void HashTable(String string){
    //JsonArray questions =  new JsonArray();
    //questions = string;
    //for(int i = 0; i < questions.length(); i++) {
        //JsonObject question = questions.getJsonObject(i);
        JSONObject jsonObj;
        try {
            jsonObj = new JSONObject(string);
            int id = jsonObj.optInt("DeviceID", -1);
            String name = jsonObj.toString();
            table.put(id, name);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    //}
}

上面的代码没有保留以前消息中的数据。谁能给个提示?

谢谢

【问题讨论】:

  • 它应该把它保存到哈希表中......或者你的意思是保持,如果你关闭并重新打开程序,数据仍然存在?
  • 为什么会有一个叫HashTable o_O的方法
  • Hashtable 在 Java 中已过时。你还在用它。有什么原因吗?
  • @Lele 感谢您的关注。我没有关闭或终止程序。我正在尝试查看是否使用多个设备存储数据以发送消息。服务器正在调试模式下运行,发送新消息后我无法看到以前的消息。
  • 嗨@Lion ......无论如何,结构都会改变。我使用哈希表只是为了让它用于演示。

标签: java hashtable


【解决方案1】:

int id = 1; - 你永远不会改变它,所以你所做的只是每次都替换 ID 1 的条目。您需要一个唯一的 ID 生成器,或者只是在每次添加条目时增加 id

编辑:正如评论者正确指出的那样,您应该使用 HashMap 而不是 HashTable,并且您真的不应该调用您的方法 Hashtable...

编辑 2:好吧,您更改了代码示例,因此这不再准确,但现在发生的情况是 DeviceID 不存在因此您得到 -1 或者您继续获得相同的设备 ID。当然,您说您想存储来自同一设备的多条消息,因此单独使用设备 ID 并不是您想要做的。您可能应该有某种消息 ID,很可能是在设备上生成的,并以某种方式合并设备 ID 以帮助确保它是唯一的。

【讨论】:

    【解决方案2】:

    那是因为,当 Json 中的“DeviceId”为空时,您最终将始终使用相同的键“1”进行存储。 因此它会替换旧值。

    解决方案

    private static AtomicInteger count = new AtomicInteger ;
    

    在你插入哈希表的地方 适应

    int id = jsonObj.optInt("DeviceID", count.addAndGet(1) );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 2014-08-17
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多