我有一组对象,A。
class A{
String name;
Collection<B> listOfB;
}
class B {
String address;
String phone;
int age;
}
我想创建一个新的A对象集合,其中2个对象具有相同的名称,地址和电话。谁能告诉我这是否是最好的方法呢?
我创建了一张Key-A地图。关键是如下:
Key {
String name;
String address;
String phone;
}
如果对应的Key不存在,我只作为列表中的对象。
答案 0 :(得分:1)
如果我正确理解您的问题,您需要地图Map<Key, A>
。重要的是你为Key
定义了相等性和哈希码(如果你想要一个哈希映射):
class Key {
String name;
String address;
String phone;
@Override // override in Object
public boolean equals(Object other) {
if(!other instanceof Key) return false;
Key otherKey = (Key) other;
return name.equals(otherKey.name) && address.equals(otherKey.address) && phone.equals(otherKey.phone); // check for null if fields can be null
}
@Override // override in Object
public int hashCode() {
return name.hashCode() ^ address.hashCode() ^ phone.hashCode(); // or something along those lines
}
}
为Key
创建构造函数并创建字段private
和final
也是个好主意。
我不确定这个密钥是如何派生的。理想情况下,Key
会以某种方式从A
派生,或者 - 更好 - A
会有hashCode
和equals
方法,因此您不需要地图,但您可以使用Set
。这实际上取决于您想要建模的数据,而您的问题不够明确,无法给出具体建议。
答案 1 :(得分:-1)
首先,在B类中实施hascode
和equals
方法。
在equals
方法返回true
时,姓名,电话和地址相同。
第二次,像这样创建你的地图=
HashMap<B,A> myMap;
地图中的关键字始终是唯一的。