Java映射键取决于值

时间:2017-09-20 10:09:05

标签: java collections

根据价值获得地图密钥是一种好习惯吗? e.g:

class MyClass {
    private String key;
    private Object value;
}

然后:

Map<String, MyClass> map = new LinkedHashMap<String, MyClass>();
MyClass a = new MyClass("key1", valueObject);
map.put(a.getKey(), a);

可以吗?我被迫有这样的类作为值,我考虑使用Set,但我需要根据index(通过keySet索引进行设置)和key获取项目(其中values key = =地图键)。我还需要固定的尺寸,可以从这个系列中删除最旧的元素。

我认为我应该确保我的键和值键字段始终相同。我怎样才能实现它?

3 个答案:

答案 0 :(得分:3)

在值实体中使用键完全没问题,这就是每个数据库创建索引的方式。一个好的做法是让MyClass成为不可变的,并将整个事物包装在一个隐藏细节的新集合类中,并防止将值插入到错误的键中。这是确保key == value.key

的方法

答案 1 :(得分:0)

您的地图存储冗余数据(双键)。 您可以将MyClass.key作为地图的关键字,将MyClass.value作为地图的值放入地图中。

答案 2 :(得分:0)

正如您所看到的,here地图将一个键映射到其值。 因此,只要您不需要密钥进行MyClass内的进一步操作,您的尝试就会有点多余。