Boolean / boolean如何作为Java中HashMap的键?

时间:2014-01-31 14:25:27

标签: java collections boolean

我有一个面试问题,询问Boolean是否可以作为Java HashMap的关键。我不确定这是怎么可能的,并希望得到解释。

目前还不清楚此问题中是否含有booleanBoolean。也许两者都应该在答案中处理。

7 个答案:

答案 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");