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

Java 如何动态更新静态查找列表,java,algorithm,design-patterns,architecture,Java,Algorithm,Design Patterns,Architecture,为了简洁起见,下面是对实际问题的简化。如果有什么不清楚,请告诉我 我有以下(伪)代码,它在一些java服务中运行。用户通过服务调用调用“isItemPresent()”(调用频率可能为每秒数千次) publicstaticset lookupSet=newhashset void init() { //读取百万行文本文件或数据库并加载lookupList 添加(“第2项”); 添加(“第5项”); 添加(“第9项”); } 布尔值isItemPresent(字符串检查项) { if(lookup

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

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

publicstaticset lookupSet=newhashset
void init()
{
//读取百万行文本文件或数据库并加载lookupList
添加(“第2项”);
添加(“第5项”);
添加(“第9项”);
}
布尔值isItemPresent(字符串检查项)
{
if(lookupSet.contain(checkItem))
返回true;
返回false;
}
init()
非常耗时,需要几秒钟才能完成。该方法仅在应用程序首次启动时调用一次

问题:

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

我想要一种方法来动态更新
lookupse
,而无需重新初始化整个应用程序。更新的方式应确保
isItemPresent()
不会为lookUpSet生成空指针异常

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

我并不担心LookupSet延迟了几纳秒,并且isItemPresent()将返回错误的结果。我要求isItemPresent()不要中断


如果需要更多详细信息,请告诉我。

使用并发集,如此问题的答案所述:

另外,
returnlookupset.contains(checkItem)
比添加
if
语句更有效

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;
}