Java 如何动态更新静态查找列表
为了简洁起见,下面是对实际问题的简化。如果有什么不清楚,请告诉我 我有以下(伪)代码,它在一些java服务中运行。用户通过服务调用调用“isItemPresent()”(调用频率可能为每秒数千次)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
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;
}