我想知道是否有类似HashMap的类,其中键是对象中的标识字段。
如果没有,我正在考虑让我使用的类作为值实现Map.Entry。这看起来像是一种合理的方法,还是看起来很危险? (我将使我的关键字段不可变。)
答案 0 :(得分:4)
我正在考虑让我使用的类作为值实现Map.Entry。这看起来像是一种合理的方法还是看起来很危险?
危险与否,这是糟糕的设计,因为它违反了单一责任原则。一个类不应该负责做自己的东西,也不应该是Map.Entry。当你现在想在另一个库中使用它时会发生什么?你必须实现另一个接口吗?
虽然我不清楚你希望通过实施Map.Entry
获得什么(你试图扩展AbstractMap
吗?),我可以告诉你这对我来说闻起来很糟糕我从来没有见过它在实践中。
这里的实际问题是什么?使用HashMap
?
Map<String, MyClass> map = new HashMap<String, MyClass>();
MyClass myObj = new MyClass("myId");
//...
map.put(myObj.getIdentifier(), myObj);
MyClass retrievedObj = map.get("myId");
答案 1 :(得分:3)
将对象(或类)添加到hashmap时,选择要发送到地图的关键字段。只需在类中创建一个getKey()方法,它将返回所需的键。
然后在将对象插入地图时使用它
例如,如果您有一个ID(String)作为键的Person类。使这个功能:
public String getKey()
{
return this.Id; //Or use the getter method
}
将Person对象插入地图时使用它:
Person1.getKey();
答案 2 :(得分:0)
你总是可以使用HashMap并添加字段作为键(如果你打算让它变成不可变的话,我没有看到任何问题)。
答案 3 :(得分:0)
这是HashMap
本身。只需确保对象中的“标识字段”正确实现equals()
和hashCode()
方法。
e.g。如果你的班级是:
public class YourObject {
private String identifyingField;
然后:
Map<String, YourObject> yourMap = new HashMap<String, YourObject>();