列出具有唯一键作为对象或枚举的键值

时间:2019-03-25 18:09:45

标签: java list collections hashmap

问题

  • 我想要一个键值对列表,例如HashMap或其他(如果推荐)。

  • 此列表应包含用于检索值的唯一键对象。

  • 键不应该是STRING,因为字符串不是唯一的,并且可以传递任何值。

  • 常量也受到限制,并且也在使用字符串的概念,因此不应该考虑。

示例

  • 所需的是实例列表[Color.Red] =“ Red”。

  • 在此阶段,我创建了一个包含所有键的枚举。 例如枚举Color {RED,BLUE},然后将其添加到新的HashMap中。

  • 因此检索颜色的唯一方法是将枚举用作键列表[Color.RED]。

实施

public final static Map<Color, String> colors = new HashMap<>();
public final static enum Color{RED, BLUE;}
static
{
   colors.put(RED, "red");
   colors.put(BLUE, "blue");
}
public static string getColor(Color color)
{
   return colors.get(color);
}

需要帮助

Java中是否存在可以完成此工作的Collection类型? 如果不是,那么最佳做法是什么?

2 个答案:

答案 0 :(得分:0)

键在所有地图中都是唯一的。添加重复的密钥,它将被覆盖。各种地图实现之间的差异涉及空密钥的可能性,迭代顺序和并发问题。

例如:

Map hm = new HashMap();
hm.put("1", new Integer(1));
hm.put("2", new Integer(2));
hm.put("3", new Integer(3));
hm.put("4", new Integer(4));
hm.put("1", new Integer(5));// value integer 1 is overwritten by 5

此外,地图键是通用的,您可以放置​​所需的内容,不仅可以是字符串,还可以是示例:

Map<Integer, String> hm = new HashMap<>();
hm.put(10, "1");

答案 1 :(得分:0)

潜在的解决方案

检查完枚举及其可能性之后,可以通过以下方法为枚举中的Key赋值。

  • 创建一个新的枚举并分配诸如公共枚举Color {RED;}之类的Key。
  • 向其添加一个构造函数参数,例如公共枚举Color {RED(“ red”);}
  • 向枚举添加构造函数,例如公共枚举Color {RED(“ red”); Color(){}}
  • 在枚举内添加一个名为value的新字段,例如private String value; public String getValue(){返回值;}
  • 在枚举的构造函数中设置字段值,例如Color(String value){this.value = value;}
  • 以这种方式枚举,对于您添加的每个Key,它都会创建一个新实例字段,该值与Key链接,然后它将使用您声明的构造函数保存该值。

全面实施

public enum Color
{
   //[PROP]
   RED("red"),
   GREEN("green"),
   BLUE("blue");

   private String value;
   public String getValue {return value;}

   //[BUILD]
   Color(String value) {this.value = value;}

   //[UTIL]
   Color[] getKeys() {return this.values;} //values method is already a method existing in enum class, we are just proposing another method name here as a facade for simplicity.
}
  • 如果我们要检索项目,我们只需要执行Color.RED.value即可,这样,只有现有键才返回想要的值。
  • 请注意,值不必是键的名称,而可以是完全不同的值。

如果您有任何更简单的解决方案而不给解决方案增加更多复杂性,请发表评论。