如何动态更新静态查找列表

时间:2013-11-27 00:45:30

标签: java algorithm design-patterns architecture

为简便起见,下面简化了实际问题。如果有什么不清楚,请告诉我。

我有以下(伪)代码在一些java服务中运行。用户通过服务调用调用'isItemPresent()'(调用频率可能是每秒数千)。

public static Set<String> lookupSet= new HashSet<String>

void init()
{
   //read some million line text file or db and load lookupList
  lookupSet.add("item 2");
  lookupSet.add("item 5");
  lookupSet.add("item 9");
}

boolean isItemPresent(String checkItem)
{
   if(lookupSet.contain(checkItem))
       return true;

   return false;
}

init()非常耗时,只需几秒钟即可完成。首次启动应用时,该方法仅被调用一次。

问题:

lookupSet中的1或2项可以每天添加或删除几次:有时每天一次或有时每天50次。

我想要一种动态更新lookupSet的方法,而无需重新初始化整个应用。更新应该是isItemPresent()不会为lookUpSet产生空指针异常的方式。

我想知道是否可以使用更新的项目列表创建新的LookupSet并将旧的LookupSet与新的LookupSet交换。因此,它不会妨碍isItemPresent()操作。 为了实现这一点,我是否需要旋转另一个将保持更新lookupSetLatest的线程,并且应用程序的lookupSet将被更新/交换。

我并不担心LookupSet会延迟几纳秒,isItemPresent()会返回错误的结果。我很关键isItemPresent()不会破坏。

如果需要更多细节,请告诉我。

1 个答案:

答案 0 :(得分:0)

使用并发集,如此问题的答案中所述:Why there is no ConcurrentHashSet against ConcurrentHashMap

此外,return lookupSet.contains(checkItem)比添加if语句更有效。