如何创建一组深层对象

时间:2014-09-02 09:29:17

标签: java map

我有一组对象,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不存在,我只作为列表中的对象。

2 个答案:

答案 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创建构造函数并创建字段privatefinal也是个好主意。

我不确定这个密钥是如何派生的。理想情况下,Key会以某种方式从A派生,或者 - 更好 - A会有hashCodeequals方法,因此您不需要地图,但您可以使用Set。这实际上取决于您想要建模的数据,而您的问题不够明确,无法给出具体建议。

答案 1 :(得分:-1)

首先,在B类中实施hascodeequals方法。 在equals方法返回true时,姓名,电话和地址相同。

第二次,像这样创建你的地图=

HashMap<B,A> myMap;

地图中的关键字始终是唯一的。