實現Key-Key結構其實能夠自定義一個類,裏面兩個Map,一個是key-value,另外一個反過來。我以爲這是應對須要動態添加元素的狀況。數組
元素是固定,並且這個key-key結構是一個字符串數組,能夠不那麼弄。數據結構
若是字符串數組只能從索引找到元素,不能從元素找到對應索引,這個時候能夠用我在開發的時候常常用枚舉,枚舉在管理業務上「類型」很方便,例如錯誤代碼,我喜歡用枚舉管理。spa
枚舉。枚舉類型的original()方法就能夠獲取對應元素的索引,索引是定義這個枚舉類時元素的順序,而values()則能夠獲取元素的數組,這兩個方法是編譯器爲枚舉類自動產生的。對象
我遇到過一個在固定的字符串數組實現索引和字符串相互當key找到對方的狀況,由於元素很少,用for循環遍歷匹配到同樣的字符串就找到對應索引,可是仍是但願能像數組用下標和Map用key同樣不用遍歷直接取值。用枚舉實現很簡單,可是從字符串獲取其在枚舉中對應索引要調用枚舉的valueOf()方法,傳入字符串拿到對應的枚舉對象才能調用original()方法。這個方法也是編譯器自動生成的。索引
因此我得看看valueOf()是怎麼實現的,若是它是用for循環遍歷枚舉類去匹配元素,那我以爲還不如直接用數組,幹嗎瞎折騰。valueOf()是自動生成,沒源碼,看枚舉類編譯後的字節碼,也看不出實現邏輯。因而只能作實驗:用枚舉類的valueOf()方法取最後一個元素的值,和用數組作for循環匹配字符串取最後那個值,再 for循環一萬遍它們的取值動做,結果發現valueOf()快不少!因此valueOf()實現邏輯應該和Map用key直接取value相似。開發
實驗證實枚舉很適合作這種字符串數組的key-key結構。僅限於「字符串-索引」且元素固定的數據結構,其餘的只能用別的方法例如我第一段話說的那樣用兩個Map。字符串