实现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。字符串