在Java中使用哪个集合?
我想将整数映射到字符串,它们是一对一的,例如:在Java中使用哪个集合?,java,collections,Java,Collections,我想将整数映射到字符串,它们是一对一的,例如: 60 : c 61 : c# 62 : d 63 : d# 64 : e 65 : f 66 : f# 但我需要具备以下能力: 从键获取值:“c”=getValue(60)[给它一个键60,返回字符串值] 从值获取键:65=getKey(“f”)[给它一个字符串值“f”,返回一个键] 哪种收集模式最适合这种情况?我这么问是因为我已经看过好几个了,没有一个能胜任这个角色。还是我必须编写代码来遍历每一对,以找到哪个键的值为“f” 编辑:jdk1.6中
60 : c
61 : c#
62 : d
63 : d#
64 : e
65 : f
66 : f#
但我需要具备以下能力:
编辑:jdk1.6中没有这样做的?并且两者都有一个双向映射。您需要的是一个BiMap。google guava library提供了这个集合。如果您不想包含commons集合或guava,只需使用两个单独的映射——您可以通过一个简单的foreach循环以编程方式从第一个映射创建反向映射。我建议您设计代码,使对这些映射的所有访问都在单个类的内部(因为这是一个实现细节,应该对系统的其余部分隐藏)。换句话说,不要将这些映射传递给任何方法。然后,如果以后选择,您可以很容易地切换到更合适的集合。Hi 我想插几句话 Java中的标准映射是单向工作的:给一个键获取对象 我不知道有一个JavaJDK1.6类可以做到这一点 一些想法 1) 创建一个具有两个映射的类,一个映射为,另一个映射为,这并不难实现^^ 2) 如果您的数据与发布的数据相似,并且这是一个预定义的关联列表,为什么不尝试使用枚举?还是一个ArrayList
杰森
< P>如果这些音符有一组固定的键值对,那么你可以考虑使用<代码> EnUM < /C>使用反向查找图。您仍然会得到两个hashmap,但至少它们在枚举中连接在一起enum Note {
C("C",60), CSHARP("C#",61), D("D",62), DSHARP("D#",63); //etc..
final int value;
final String symbol;
static final Map<Integer, Note> lookup = new HashMap<Integer, Note>();
static {
for(Note n : Note.values()) {
lookup.put(n.value, n);
}
}
Note(String symbol, int value) {
this.symbol = symbol;
this.value = value;
}
static Note get(int i) {
return lookup.get(i);
}
}
这将导致
CSHARP
C#
61
C#
PS.为了简洁起见,删除了修改器。
PSS。添加符号的其他查找地图。在另一个论坛()中找到此地图
这应该可以每个数字都有关联值吗?从12到107的数字都与字符串“jdk1.6中没有任何东西可以这样做?”相关联。不。
HashMap
需要是LinkedHashMap
才能双向使用。
CSHARP
C#
61
C#
public class ReversibleMap {
private final Map keyToValue = new HashMap(8);
private final Map valueToKey = new HashMap(8);
public void put(Integer key, String value) {
keyToValue.put(key, value);
valueToKey.put(value, key);
}
public String get(Integer key) {
return (String) keyToValue.get(key);
}
public Integer getKey(String value) {
return (Integer) valueToKey.get(value);
}
}