Java映射键取决于值

Java映射键取决于值,java,collections,Java,Collections,根据值设置映射键是否是一种好的做法? e、 g: 然后: Map<String, MyClass> map = new LinkedHashMap<String, MyClass>(); MyClass a = new MyClass("key1", valueObject); map.put(a.getKey(), a); Map Map=newlinkedhashmap(); MyClass a=新的MyClass(“key1”,valueObject); map.

根据值设置映射键是否是一种好的做法? e、 g:

然后:

Map<String, MyClass> map = new LinkedHashMap<String, MyClass>();
MyClass a = new MyClass("key1", valueObject);
map.put(a.getKey(), a);
Map Map=newlinkedhashmap();
MyClass a=新的MyClass(“key1”,valueObject);
map.put(a.getKey(),a);
可以吗?我被迫拥有一个像value这样的类,我考虑过使用
Set
,但我需要基于
索引(按键集索引获取)和
键(其中value key==maps key)获取项。我还需要从这个集合中删除最古老的元素的可能性固定大小


我认为我应该确保我的key和values key字段始终相同。如何实现它?

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

正如您可以看到的那样,映射将键映射到其值。
因此,您的尝试有点多余,只要在
MyClass

中进行进一步操作时不需要密钥,就可以在值实体中使用密钥,这就是每个数据库创建索引的方式。一个好的做法是将
MyClass
设置为不可变的,并将整个内容包装在一个新的集合类中,隐藏细节并防止向错误的键插入值。这是确保
key==value.key

“这是一个好的实践吗”,“我被迫上这样的课”-那么你为什么要问它是否好?没有任何解释为什么你认为你需要它是不可能帮助你的。关于“我应该确保我的key和values key字段始终相同”,我不知道你想问什么。@JaroslawPawlak有理由怀疑这是否是一种好的做法,即使是被迫的情况。如果您已经处于这样一种情况,那么您对它进行评估的意图是合法的。@gautham不正确,还有其他DS可以用于基于索引的获取,例如集合,甚至是问题中的映射实现。@JaroslawPawlak我被迫拥有这个类,现在,我问是否可以像我描述的那样存储键值,因为map最适合我的需求。@gautham我使用map是因为性能原因。我可以扩展
LinkedHashMap
并覆盖
put
方法吗?这就是你的意思:)?基本上是的,但我更喜欢组合而不是继承。我不知道你是否真的需要一张地图作为最终结果。您可以使用Map界面,但看到Map的人希望它满足一些约束,例如
。put
不删除任何元素。这就是为什么我要创建一个新类
myindexedfio
,它不会实现
Map
。它最多只能实现
Collection
。我使用
LinkedHashMap
和实现的
RemoveedStantry(…)
方法完美地满足了我的需求。我只是不知道如何处理我的关键对象依赖性。
Map<String, MyClass> map = new LinkedHashMap<String, MyClass>();
MyClass a = new MyClass("key1", valueObject);
map.put(a.getKey(), a);