Java 一种哈希映射,其中值对象';s字段是关键?

Java 一种哈希映射,其中值对象';s字段是关键?,java,hashmap,Java,Hashmap,我想知道是否有像HashMap这样的类,其中键是对象中的标识字段 如果没有,我正在考虑使用类作为值implementmap.Entry。这似乎是一种合理的方法还是一种危险的方法?(我将使我的键字段不可变。) 我正在考虑使用类作为值implementmap.Entry。这似乎是一种合理的方法还是一种危险的方法 无论危险与否,这都是一个糟糕的设计,因为它违反了单一责任原则。一个类不应该负责自己的事情,也不应该是一个Map.Entry。如果您现在想在另一个库中使用它,会发生什么?您必须实现另一个接口吗

我想知道是否有像HashMap这样的类,其中键是对象中的标识字段

如果没有,我正在考虑使用类作为值implementmap.Entry。这似乎是一种合理的方法还是一种危险的方法?(我将使我的键字段不可变。)

我正在考虑使用类作为值implementmap.Entry。这似乎是一种合理的方法还是一种危险的方法

无论危险与否,这都是一个糟糕的设计,因为它违反了单一责任原则。一个类不应该负责自己的事情,也不应该是一个Map.Entry。如果您现在想在另一个库中使用它,会发生什么?您必须实现另一个接口吗

虽然我不清楚通过实现
Map.Entry
(您是否试图扩展
AbstractMap
?)您希望获得什么,但我可以告诉您,这对我来说很难闻,而且我从未在实践中见过这样做

这里的实际问题是什么?使用
哈希映射有什么问题

Map<String, MyClass> map = new HashMap<String, MyClass>();
MyClass myObj = new MyClass("myId");

//...
map.put(myObj.getIdentifier(), myObj);

MyClass retrievedObj = map.get("myId");
Map Map=newhashmap();
MyClass myObj=新的MyClass(“myId”);
//...
put(myObj.getIdentifier(),myObj);
MyClass retrievedObj=map.get(“myId”);
我正在考虑使用类作为值implementmap.Entry。这似乎是一种合理的方法还是一种危险的方法

无论危险与否,这都是一个糟糕的设计,因为它违反了单一责任原则。一个类不应该负责自己的事情,也不应该是一个Map.Entry。如果您现在想在另一个库中使用它,会发生什么?您必须实现另一个接口吗

虽然我不清楚通过实现
Map.Entry
(您是否试图扩展
AbstractMap
?)您希望获得什么,但我可以告诉您,这对我来说很难闻,而且我从未在实践中见过这样做

这里的实际问题是什么?使用
哈希映射有什么问题

Map<String, MyClass> map = new HashMap<String, MyClass>();
MyClass myObj = new MyClass("myId");

//...
map.put(myObj.getIdentifier(), myObj);

MyClass retrievedObj = map.get("myId");
Map Map=newhashmap();
MyClass myObj=新的MyClass(“myId”);
//...
put(myObj.getIdentifier(),myObj);
MyClass retrievedObj=map.get(“myId”);
将对象(或类)添加到hashmap时,选择要发送到映射的密钥字段。只需在类中创建一个getKey()方法,该方法将返回所需的键

然后在将对象插入地图时使用它

例如,如果您有一个ID(字符串)为键的Person类。使此功能:

public String getKey()
{
   return this.Id; //Or use the getter method
}
并在将Person对象插入地图时使用它:

Person1.getKey();
将对象(或类)添加到hashmap时,选择要发送到映射的键字段。只需在类中创建一个getKey()方法,该方法将返回所需的键

然后在将对象插入地图时使用它

例如,如果您有一个ID(字符串)为键的Person类。使此功能:

public String getKey()
{
   return this.Id; //Or use the getter method
}
并在将Person对象插入地图时使用它:

Person1.getKey();

您可以始终使用HashMap并将字段添加为键(如果要使其不可变,我看不出有任何问题)。

您可以始终使用HashMap并将字段添加为键(如果要使其不可变,我看不出有任何问题)。

这是
HashMap
本身的问题。只需确保对象中的“标识字段”正确实现了
equals()
hashCode()
方法

e、 g.如果您的班级是:

public class YourObject {
    private String identifyingField;
然后:

Map yourMap=newhashmap();

这是
HashMap
本身。只需确保对象中的“标识字段”正确实现了
equals()
hashCode()
方法

e、 g.如果您的班级是:

public class YourObject {
    private String identifyingField;
然后:

Map yourMap=newhashmap();

你的物体看起来怎么样?为什么你需要一张特殊的地图?创建一个类
V
,给它一个成员字段
K
,并创建一个
Map
。再想一想,我创建值实现Map.Entry的概念是不可行的,因为Map.Entry有一个公共方法setValue()。因为我不能将“this”设置为另一个值,所以它实际上无法实现。您的对象是什么样子的?为什么需要一个特殊的贴图?创建一个类
V
,给它一个成员字段
K
,并创建一个
Map
。再想一想,我创建值实现Map.Entry的概念是不可行的,因为Map.Entry有一个公共方法setValue()。既然我不能把“this”设为另一个值,那就不可能真正做到。我认为你的基本观点是正确的。我只是想让事情不那么冗长,但在这个过程中我可能有点想入非非。我认为你的基本观点是正确的。我只是想让事情变得不那么冗长,但在这个过程中,我可能有点想入非非。我喜欢以方法的用途命名,而不是以它们的用途命名。如果要创建
Person
对象的数组,要向
Person
添加
getIndex()
方法吗?我建议不要命名您的方法
getKey()
,因为您几乎肯定会在一个上下文中使用它,而不是在地图中的键。如果您的
getKey()
要返回此人的Id,那么就不需要
getKey()
,只需使用
getId()
。我喜欢按照方法的用途来命名方法,而不是按照它们的用途来命名。如果要创建
Person
对象的数组,要向
Person
添加
getIndex()
方法吗?我建议不要命名您的方法
getKey()
,因为您几乎肯定会在一个上下文中使用它,而不是在地图中的键。如果您的
getKey()
将返回此人的Id,则无需