【发布时间】:2014-04-04 11:16:33
【问题描述】:
给定一个键和值都可序列化的 Java Map,我希望能够序列化键值对。有没有任何有效的方法可以让我将键值对作为对象检索并序列化?我已经看过 map 类的 entrySet() 方法,但我不喜欢搜索两次。
【问题讨论】:
标签: java serialization hashmap
给定一个键和值都可序列化的 Java Map,我希望能够序列化键值对。有没有任何有效的方法可以让我将键值对作为对象检索并序列化?我已经看过 map 类的 entrySet() 方法,但我不喜欢搜索两次。
【问题讨论】:
标签: java serialization hashmap
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)
【讨论】:
你可以将它序列化为一个数组:
Object obj = new Object[] {key, value}
只要 key 和 value 可以序列化,obj 就可以序列化
【讨论】: