我有一个相当简单的大学问题,我无法解决问题
我有两个对象数组,我们称它们为 A
和 B
A
可以有多个 B
我必须实现
public void linkThem( A[] aArray, B[] bArray)
{
}
public List<B> getBbyA( A a)
{
}
和
public List<A> getAbyB( B b)
{
}
迭代次数最少!!
现在我能看到的唯一解决方案是创建新类 AB
:
class AB
{
private final A a;
private List<B> bList = new ArrayList<B>();
public AB( A a )
{
this.a = a;
}
}
在主类中添加 private static List<AB> ABList = new ArrayList<AB>();
做foreach()
在所有A
和 B
在 geters 中做更多 foreach()
(在 AB
上然后在 AB
foreach()
上 bList
)
但这是一种非常丑陋的“蛮力”方法,我真的想要更简单、更少“系统繁重”的解决方案。
提前致谢。
最佳答案
如果我像 xp500 所说的那样回答您的问题,您应该查看 map 。
对于您的困境,非常简单的解决方案如下:
private Map<A,B> AtoB = new HashMap<A,B>();
private Map<A,List<B>> BtoA = new HashMap<A,List<B>>();
在“链接”部分你做的:
public void linkThem( A[] aArray, B[] bArray)
{
for (A a : aArray)
for (B b : bArray)
if( theyAreLinked() )
{
AtoB.put( a, b );
List<B> temp = BtoA.get(a);
if(temp == null)
temp = new ArrayList<B>();
temp.add(b);
BtoA.put( a,temp ):
}
}
在 setter/getter 中:
public List<B> getB( A a)
{
return BtoA.get( a );
}
// i think you should only return one A here
public A getA( B b)
{
return AtoB.get( b );
}
但我认为,如果您过度优化,这里有更好的解决方案...但正如您所说,这适用于大学,我认为这就足够了。
关于java - 链接两个对象并逐个获取它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31428296/