2

语言 :Java
项目类型 :Web(战争应用程序)
要求 :根据地区,我们需要显示数据库中的字符串文字。

描述: - 我们有一些特定于语言的数据库表,其中我们将字符串文字映射为键值对。

E.g. I) - like for en_US, Table Name: - StringLiteral_en_US 
----------------------------------------------------
 Key                |    Value
 Customer_Name      |     ABC
 Address            |     XYZ

 Values will be continued....around 2000

 E.g. II) - like for en_GB, Table Name: - StringLiteral_en_GB
 ----------------------------------------------------
Key                |    Value
Customer_Name      |     ABC  
Address            |     XYZ  

Values will be continued....around 2000

表已正确维护,我们正在从数据库中获取所有键值并将其存储到数据结构中 [直到现在我们选择了 LinkedHashMap]

问题:-

我们很难选择最佳的数据结构来存储价值并以更快的方式检索价值。因为我们将随机获取。无论需要什么密钥,我们都会获取该特定密钥。

所以我们需要保持程序的效率,这样无论何时key/value都会增加。在随机访问任何密钥期间不会有任何影响。

要求: -

请建议我们选择可以提高产品生产力的数据结构。

所有的建议将不胜感激。

4

3 回答 3

2

没有办法选择一个而不是另一个。您没有提供任何指标来说明您需要什么性能,也没有提供您获得的性能。

注意:在大多数情况下,创建 String 键会比查找地图更昂贵。

我建议您使用最简单的实现,在这种情况下可能是 HashMap。如果您使用 LinkedHashMap,您可以看到添加元素的顺序,这可能很有用。

于 2013-05-22T17:26:26.110 回答
2

由于您这样做是为了国际化,并且您关心“产品生产力”,我会尝试以某种方式将这些数据放入资源包中。它就是为此目的。

如果您正确设置它,它将使您的面向客户的代码更容易实现。例如,一旦您正确设置了资源包,您可以在 jsp 中编写此代码,它会知道如何选择写入值:<h3><fmt:message key="Choose"/></h3>. 如果没有资源包,您将不得不手动编写自己的流控制逻辑。那将是乏味和错误的。

即使您不使用 jsps,您的 Web 框架也可能知道如何处理 ResourceBundle。如果你把它放在一个简单的数据结构中,你的 web 框架可能不知道如何使用它。

这是有关如何使用数据库加载资源包的教程。

于 2013-05-22T17:28:36.590 回答
1

如果纯粹是为了国际化,我看不出插入顺序的Entry重要性。所以我会说不LinkedHashMap

ResourceBundles 或这些属性在初始化期间加载。除非有一个运行时重新加载和各种线程争取赢得NOConcurrentHashMap

HashMap检索速度很快,是一个潜在的候选者。

如果您想创建引用,WeakHashMap很好看

如果存在一对一的键值映射并且您想反向查找,请尝试Bimap

于 2013-05-22T17:43:02.163 回答