我有一个面试问题,询问Boolean
是否可以作为Java HashMap
的关键。我不确定这是怎么可能的,并希望得到解释。
目前还不清楚此问题中是否含有boolean
或Boolean
。也许两者都应该在答案中处理。
答案 0 :(得分:5)
当然你可以:
Map<Boolean,MyType> myMap = new HashMap<Boolean,MyType>();
myMap.put(true, newValue); // Write
MyType t = myMap.get(boolKey); // Read
Autoboxing让您的工作变得非常简单 - 您甚至无需将boolean
转换为Boolean
。
然而,当boolean
只有两个可能的值时,为什么还要为地图烦恼呢?一个包含两个项目和一个简单条件的数组会表现得更好:
MyType[] myArrayMap = new MyType[2];
myArrayMap[key ? 1 : 0] = newValue; // Write
MyType t = myArrayMap[key ? 1 : 0]; // Read
答案 1 :(得分:3)
你可以这样做。例如
Map<Boolean, String> selectedIds = new HashMap<Boolean, String>();
用法??
selectedIds.put(Boolean.TRUE, "stack");
selectedIds.put(Boolean.FALSE, "nostack");
答案 2 :(得分:3)
如果是关于Java类java.util.HashMap<K,V>
则不能,因为boolean
是原始类型。您需要使用Boolean
答案 3 :(得分:2)
是的,如果你的意思是布尔值,用大写字母B.HashMap可以有任何类型作为键。如果只允许布尔值,您的地图将只有两个可能的键:
HashMap<Boolean, ?> map = new HashMap();
map.put(Boolean.TRUE, someObject);
map.put(Boolean.FALSE, someOtherObject);
...
答案 4 :(得分:2)
这是一个很棒的(也很有趣!)问题。您将只有两个项目,但您可以将多个项目混合到每个值中。例如:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
/**
<P>{@code java BooleanKeyedMapXmpl}</P>
**/
public class BooleanKeyedMapXmpl {
public static final void main(String[] igno_red) {
System.out.println("<Boolean,String>:");
Map<Boolean,String> mbs = new TreeMap<Boolean,String>();
mbs.put(true, "hello");
mbs.put(false, "goodbye");
System.out.println("true: " + mbs.get(true));
System.out.println("false: " + mbs.get(false));
System.out.println();
System.out.println("<Boolean,ArrayList<String>>:");
Map<Boolean,List<String>> mbls = new TreeMap<Boolean,List<String>>();
mbls.put(true, new ArrayList<String>());
mbls.put(false, new ArrayList<String>());
List<String> lsTrue = mbls.get(true);
lsTrue.add("hello1");
lsTrue.add("hello2");
lsTrue.add("hello3");
lsTrue.add("hello4");
lsTrue.add("hello5");
List<String> lsFalse = mbls.get(false);
lsFalse.add("goodbye1");
lsFalse.add("goodbye2");
lsFalse.add("goodbye3");
lsFalse.add("goodbye4");
lsFalse.add("goodbye5");
System.out.println("true: " + Arrays.deepToString(lsTrue.toArray()));
System.out.println("false: " + Arrays.deepToString(lsFalse.toArray()));
}
}
输出:
[C:\java_code\]java BooleanKeyedMapXmpl
<Boolean,String>:
true: hello
false: goodbye
<Boolean,ArrayList<String>>:
true: [hello1, hello2, hello3, hello4, hello5]
false: [goodbye1, goodbye2, goodbye3, goodbye4, goodbye5]
答案 5 :(得分:0)
是。布尔基元有一个布尔包装类,恰当地命名为Boolean。和往常一样,API是你最好的朋友:http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html但是就像上面说的那样,你的地图只会有两个条目,这看起来很奇怪。
答案 6 :(得分:0)
显然你可以。
Map<Boolean, String> myMap = new HashMap<Boolean, String>();
myMap.put(true, "A");
myMap.put(false, "D");