【问题标题】:Access a Map's key-value pair as an object将 Map 的键值对作为对象访问
【发布时间】:2014-04-04 11:16:33
【问题描述】:

给定一个键和值都可序列化的 Java Map,我希望能够序列化键值对。有没有任何有效的方法可以让我将键值对作为对象检索并序列化?我已经看过 map 类的 entrySet() 方法,但我不喜欢搜索两次。

【问题讨论】:

    标签: java serialization hashmap


    【解决方案1】:

    map 没有提供这样的方法。但是你仍然可以做什么,通过扩展 Map 实现作为示例 - HashMap<K,V> 并实现这样的方法 -

    Map<K,V> map = new HashMap<K,V>(){
    public Entry<K,V> get(Object key) { // overloading get method in subclass
         if (key == null)
             return getForNullKey();
         int hash = hash(key.hashCode());
         for (Entry<K,V> e = table[indexFor(hash, table.length)];
              e != null;
              e = e.next) {
             Object k;
             if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
                 return e;
         }
         return null;
     }
    
    
     private Entry<K,V> getForNullKey() { 
         for (Entry<K,V> e = table[0]; e != null; e = e.next) {
             if (e.key == null)
                 return e;
         }
         return null;
     }};
     ...
     Map.Entry<K,V> entry1 = map.get(key);// invoking Entry<K,V> get(Object key) 
    

    【讨论】:

      【解决方案2】:

      你可以将它序列化为一个数组:

      Object obj = new Object[] {key, value}
      

      只要 key 和 value 可以序列化,obj 就可以序列化

      【讨论】:

        猜你喜欢
        • 2021-09-30
        • 2022-08-04
        • 2019-04-03
        • 2020-08-03
        • 1970-01-01
        • 2019-09-13
        • 2018-07-26
        • 1970-01-01
        • 2020-05-18
        相关资源
        最近更新 更多