2012-03-02 48 views
2

匹配两个ID我有字符串的两个非常巨大的列表,包含了一些标识(超过70K)之一,并包含一些字符串信息的另一个列表,包含ID(超过40万项),每行。我需要为第一个列表中的每个ID从第二个列表中获取具有相同ID的所有消息。我试图通过创建一些线程用于从第一列表中的每个ID,可以迭代整个第二列表,并检索&删除该消息。这似乎创建了太多的Iterator对象,导致OOM没有给出足够的内存。另外,迭代第二个列表时CPU是100%。有什么建议么?我可以改变实现,容器也是我保留的信息。有效的方法来从两个很长的货柜

谢谢。

while (condition) {      
    <Message> iterator = msgQueue.iterator(); 
       while (iterator.hasNext()) { 
        Message message = iterator.next(); 

        if (filter.filter(message)) { 
         iterator.remove(); 
        } 
       } 
      } 

回答

0

我把这些对象不进两个列表像你这样的,但在地图,其中关键是从第一个列表中的ID和值是一组包含ID消息。

4

变换您第二列表到HashMap<String, List<String>>(该键为ID,并且该值是包含该ID的消息的列表)。然后遍历您的第一个列表并从地图获取相应的消息。

你可以用番石榴的MultiMap实现之一。

0

一个不太线程算法可以做到。通过ID对两个列表进行排序并获取一系列ID(列表列表?)以进行迭代将更快并且因此对于顺序处理或更少的线程是可行的。

相关问题