java - 链接两个对象并逐个获取它们

标签 java optimization

我有一个相当简单的大学问题,我无法解决问题

我有两个对象数组,我们称它们为 AB

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()在所有AB在 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/

相关文章:

java - 计算器 Android 应用程序中的乘法在输出中抛出 Alphabeta

java - 对数组进行快速排序并在 Java 中进行二进制搜索

java - 如何在ajax中从jsp返回列表作为JSON对象?

java - Pattern.compile.split 与 StringBuilder 迭代和子字符串

c++ - 为什么在这种特殊情况下数据类型会影响性能?

MySQL 从子查询中提取列以将其附加到主列

java - 通过entityManager.refresh刷新实体集合(getResultList)

java - Java Swing 同时进行 MouseEntered 和 KeyPressed

javascript - 如何读取和优化 Javascript 配置文件?

swift - SceneKit 的立方体测试性能