如果我有两个一对一关系的类,那么现在是使用映射的好时机。
class A { ... }
class B { ... }
class C {
Map<A,B> a2b;
}
何时是使用作文的好时机?
class A {
B myB;
}
class B { ... }
如果关系是一对多和多对多,答案会改变吗?
答案 0 :(得分:1)
使用Map
会增加整个事情的复杂性。
这是因为在你的例子中,两个类中的一个(A
)拥有另一个,这对于组合来说都是正确的(因为你需要A
来检索它B
)要么用于映射(因为您需要值为A
的密钥B
)。
因此,如果没有明确需要使用地图,那就避免使用它。
对于案例1:N,M:N,您应该始终考虑需要对对象执行何种操作,因为有第三个对象只管理A
和{{之间的映射1}}不是真正的OO解决方案,你可以使用合成。
一对多可以使用B
内的List<B>
进行建模,而多对多是唯一一种映射可能很好的情况,因为否则您将不得不探索这两个对象都是为了理解它们的映射。
很快:如果你将从A
角度(A
拥有A
)访问数据,那么你不需要有外部映射,否则你会,但它应该是双向的(两个哈希图)。
答案 1 :(得分:1)
这取决于整个项目中A
与B
关系的使用范围。
如果项目的许多不同区域需要知道与B
相关联的A
,那么最好将其作为A
对象的一部分。另一方面,如果此关联仅用于项目的一个部分,那么您应该在项目的该部分中创建HashMap
来存储关系。
如果这是一对多或多对多的关系,这个答案不会改变。
答案 2 :(得分:0)
该地图适用于多对多关系(如数据库设计中的连接表)。只要您的一对一或一对多关系不需要特殊属性,就不需要使用第三个类(此第三个类会建模关系本身)。
如果您需要从两个方向看,请建立关联,也许是双向关联:
public class A {
private B b;
public A(B b){
this.b = b;
b.setA(this); // for bi-directional association
}
}
public class B {
private A a;
public B(){};
public void setA(A a) {
this.a=a;
}
}