亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

列出具有唯一鍵作為對象或枚舉的鍵值

列出具有唯一鍵作為對象或枚舉的鍵值

泛舟湖上清波郎朗 2022-09-01 16:44:28
問題我想要一個鍵值對的列表,例如HashMap或其他推薦。此列表應包含用于檢索值的唯一鍵對象。鍵不應該是字符串,因為字符串不是唯一的,任何值都可以傳遞。此外,常量是有限的,并且也使用字符串的概念,因此不應考慮。例例如,想要的是list[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中是否有一種類型的集合可以完成這項工作?如果不是,那么這樣做的最佳做法是什么?
查看完整描述

2 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

潛在解決方案

在檢查枚舉及其可能性之后,有一種方法可以將值分配給枚舉中的鍵,如下所示。

  • 創建一個新枚舉并分配 Key,例如公共枚舉 Color{RED;}。

  • 向其添加構造函數參數,例如公共枚舉 Color{RED(“red”);}

  • 向枚舉添加構造函數,例如公共枚舉 Color{RED(“red”);Color(){}}

  • 在枚舉中添加一個名為值的新字段,例如私有字符串值;public String getValue() {return value;}

  • 在枚舉的構造函數中設置字段值,例如 Color(String value) {this.value = value;}

  • Enum以這種方式工作,對于您添加的每個Key,它都會創建一個鏈接到Key的新實例字段 String值,然后它將使用您聲明的構造函數來保存該值。

全面實施

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,這樣只有現有的鍵返回想要的值。

請注意,值不必是鍵的名稱,但可以是完全不同的值。

如果您有任何更簡單的解決方案,而不會給解決方案帶來更多復雜性,請發表評論。


查看完整回答
反對 回復 2022-09-01
?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

這些鍵在所有地圖中都是唯一的。添加重復的鍵,然后它將被覆蓋。各種映射實現之間的差異涉及空鍵的可能性,迭代順序和并發問題。

示例:

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鍵是通用的,你可以放你想要的,而不僅僅是字符串,示例:

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


查看完整回答
反對 回復 2022-09-01
  • 2 回答
  • 0 關注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號