我正在寻找一个集合类型的数据结构来实现以下功能。假设我有一堂这样的课:
class Person() {
String homeTown; // key
String sex; // key
String eyeColour; // key
String name;
long height;
// other stuff....
}
我正在处理多个 Person 对象。我想将它们组织成集合,其中每个集合包含具有相同家乡、性别和眼睛颜色的 Person 对象。目前我正在实现这样的事情:
Map<String, HashSet<Person>> = new HashMap<String, HashSet<Person>>;
其中的关键是家乡、性别和眼睛颜色的串联。这可行,但看起来有点凌乱 - 谁能建议一个更优雅的解决方案或更好的数据结构来使用,谢谢?
最佳答案
您可以重组您的类以使 key 明确。这比简单地连接键值更强大,并且当您希望将 Person 实例存储在 Map 中时可以避免任何额外的对象创建开销,因为您已经提前创建了键。
public class Person {
public class Key {
private final String homeTown;
private final String sex;
private final String eyeColour;
public Key(String homeTown, String sex, String eyeColour) { ... }
public boolean equals(Object o) { /* Override to perform deep equals. */ }
public int hashCode() { /* Could pre-compute in advance if the key elements never change. */ }
}
private final Key key;
private final String name;
private final long height;
public Person(String homeTown, String sex, String eyeColour, String name, long height) {
this.key = new Key(homeTown, sex, eyeColour);
this.name = name;
this.height = height;
}
public Key getKey() {
return key;
}
public String getName() { return name; }
public long getHeight() { return height; }
}
关于java - 键中有多个值的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3995683/