我想创建从缩写到完整字符串的映射,例如:
MC - MasterCard
。
我后来想要将该映射用于不知道缩写但只知道完整字符串的web服务。
这些映射应该是枚举还是HashMaps?我能想到以下解决方案:
代表enum
:
String cc = TypeCreditCard.MASTER.getValue("MC").getFullname();
xml.setOrganisation(cc);
表示静态HashMap<String, String>
:
String cc = creditCards.get("MC");
xml.setOrganisation(cc);
你更喜欢什么,为什么?
答案 0 :(得分:1)
我把它实现为这样的枚举:
public enum CC {
MC("MasterCard"),
V("VISA");
private CC(String fullString) {
this.fullString = fullString;
}
private String fullString;
public String getFullString() {
return this.fullString;
}
public static CC of(String fullString) {
for (CC cc: CC.values()) {
if (cc.getFullString().equals(fullString) {
return cc;
}
}
return null;
}
}
然后,您可以使用
获取完整字符串String fullString = CC.MC.getfullScreen();
并使用
获取缩写CC abbreviation = CC.of("MasterCard");
答案 1 :(得分:1)
如果您的密钥可以由enum
描述,那么至少可以使用EnumMap
而不是HashMap
来理解这些密钥,原因如下:
EnumMap
针对enum
个密钥进行了优化EnumMap
作为关键对象时,HashMap
的效果可能优于enum
EnumMap
未在密钥上调用hashCode
方法,因此无法发生冲突。有关EnumMap
和this文章的官方文档的更多信息。
答案 2 :(得分:0)
这是一个主观问题。没有“正确”的答案。
对我而言;枚举最适合于将值作为参数传递的用例,并且您希望确保它在编译时是一组众所周知的值之一。
当值表示应用程序所处理的数据时,最好使用Map。如果您的应用程序不需要执行if x = enum then do this
类型的逻辑,那么请使用Map。如果它使用不同的代码来计算不同的选项,请使用枚举。
如果我只是想将信用卡缩写映射到更具描述性的名称,我会使用properties file(当然会实现Map)。