【发布时间】:2013-08-19 19:43:36
【问题描述】:
这可能不是最好的数据结构,但我想知道是否可以这样做:
我有一组工具,每个工具都有一个唯一的 ID 和一堆或属性。每个工具还有一个包含属性的房间集合。
我希望使用该工具作为 HashMap 的键和分庭列表作为值。
从数据库中取回所有腔室信息后,我想通过 toolId 获取关键对象(工具),以便将每个腔室添加到相应的工具中。我重写了equals方法和hash方法来使用toolId。
除了带回所有键并对其进行迭代以查看它们是否等于 toolId 之外,还有什么方法可以获取键对象
到目前为止,这是我的代码:
Public class ToolBean {
Private String toolId;
Private String toolName;
Private String toolOwner;
Public ToolBean(String toolId){
this.toolId = toolId;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ToolBean other = (ToolBean) obj;
if (toolId == null) {
if (other.toolId != null)
return false;
} else if (!toolId.equals(other.toolId))
return false;
return true;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((toolId == null) ? 0 : toolId.hashCode());
return result;
}
}
我正在创建的结构将如下所示:
LinkedHashMap<ToolBean, LinkedHashMap<String, ChamberBean>> toolWithChamberMap = new LinkedHashMap<ToolBean, LinkedHashMap<String, ChamberBean>>();
我知道我可以使用具有 Chambers 的 LinkedHashMap (LinkedHashMap) 的 ToolBean 创建一个结构,然后打开工具,将新的房间添加到地图中,然后将工具放回原始地图中。我想知道是否有办法跳过这一步。
谢谢, 布里塔
【问题讨论】:
-
只需使用 Key=toolid 和 Value=tool 创建第二个 HashMap。
-
这看起来足以让您使用带有哈希映射的 ToolBean 类。代码对我来说看起来不错,假设您总是认为两个对象相同,如果它们具有相同的工具 id。
-
那么你的问题是什么?代码会起作用吗?我认为会的。你试过了吗?发生了什么?道文的回答很好,但我认为你不需要这样做。使用您添加到 ToolBean 的代码,ToolBean 对象可以合理地充当哈希映射中的键。
-
所以问题是:我有一个来自数据库的房间对象,需要使用 toolId = 'aaa' 将其添加到工具中 如何获取/添加值到键? getKey('aaa') 会起作用还是我需要获取对象?
-
这可能不清楚,但是带有 toolId 'aaa' 的 ToolObject 已经有腔室 'one',我需要将腔室 'two' 添加到腔室地图中。 Can (How Can) 我使用 ToolObject 作为键来做到这一点。
标签: java hashmap linkedhashmap