如何才能提高此实施效率

时间:2012-02-01 16:39:16

标签: java algorithm

我有一个需要处理传入对象的服务方法:(顺便说一下,这是伪代码)

public class IncomingParentObject {
    public Collection<IncomingChildOject> childObjects; 
}

public Class IncmoingChildObject {
    public String name;
}

我有一个“客户端”的“注册表”,它关心传入的子对象的子集。在注册时我们只知道“名称”。客户端对象封装传输层的详细信息以将信息转发到。

public class Registry {
    // String represents the name in the child object
    public Map<String, Set<Client>> clients;
}

现在服务类就是这样的:

public void processIncmoingParentObject(IncomingParentObject parentObject) {
    for (IncmoingChildObject childObject : parentObject.childObjects) {
        Set<Client> clients = registry.clients.get(childObject.name);

        for (Client client : clients) {
            this.transportLayer.transportChildObject(childObject, client);
        }
    }
}

这导致对transportLayer的多次调用(这可能是昂贵的或及时的)。我想将这个减少到基本上每个ChildObjects子集的一个传输。

transportLayer.transport(Client client, Set<IncmoingChildObject> childObjects);

一个精致的庄园将通过父母的孩子扫描,以确定一个孩子的子集发送给客户。

2 个答案:

答案 0 :(得分:3)

我会使用地图跟踪每个Set<IncomingChildObject>的{​​{1}}。

在未经测试的Java中:

Client

答案 1 :(得分:1)

好吧,你可以建立一个地图名称 - &gt;子列表然后迭代列表并获取地图中每个键的客户端。然后将该客户端和映射条目的子项列表传递给传输层。

为此您可以尝试使用Apache Commons Collections项目中的Multimap实现之一(它不支持泛型,但是有第三方端口可以,或者尝试Google Guava,尽管我不喜欢知道它是否提供了多图。)