我正在创建一个hashmap,如下所示:
HashMap <String,String> DtsFeed = new HashMap<String, String>();
我的密钥是动态的,价值也是动态的。
DtsFeed.put(Request.getRequestId(), feedtype);
有可能吗?
答案 0 :(得分:1)
您的示例有效,但我建议添加泛型,但不是必需的。
HashMap<Object,Object> DtsFeed = new HashMap<>();
DtsFeed.put(key, value);
Object got = DtsFeed.get(key);
无论地图定义如何,Map.get()始终使用普通对象。
但请记住,您必须从地图中转换返回的结果才能使用它们。 (你的解决方案有潜在危险/不安全)
您还可以遍历entrySet()/ keySet()
答案 1 :(得分:1)
如果“动态密钥”表示密钥的内容在Map中发生变化,则答案是您必须非常小心。如果密钥的hashcode()
值在地图中发生变化,则不会发生任何好事。如果你发生这种情况,那么使用密钥进行查找将无法找到该条目。
如果您让密钥的某些部分发生变化,但确保equals()
和hashcode()
不会更改,那么查找将继续有效。我从未见过这在实践中得到实施。
我经常看到的是使用逻辑键的不变部分作为实际键。例如,我们可能有一个实体代表数据库中的一行,并包含一个不会更改的ID值。您可以将ID用作地图中的关键字(例如Map<Long, Value>
而不是Map<Entity, Value>
)。
这通常不起作用:
Map<Entity, Value> map = new HashMap<>();
Entity entity = ...
Value value = ...
map.put(entity, value);
entity.setA(a);
Value willBeNull = map.get(entity);
这通常有效:
Map<Long, Value> map = new HashMap<>();
Entity entity = ...
Value value = ...
map.put(entity.getId(), value);
entity.setA(a);
Value willBeTheExpecteValue = map.get(entity.getId());
答案 2 :(得分:0)
你的意思是关键和价值都可以改变吗?您可以考虑使用IdentityHashMap,它使用引用而不是hashCode()和equals()来比较键。
使用IdentityHashMap,您始终可以检索与密钥关联的值,即使密钥可以更改状态。