布尔/布尔值如何作为Java哈希图的钥匙



我有一个面试问题,询问Boolean是否可以作为Java中HashMap的钥匙。我不确定这是怎么可能的,想要解释。

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

当然可以:

Map<Boolean,MyType> myMap = new HashMap<Boolean,MyType>();
myMap.put(true, newValue);     // Write
MyType t = myMap.get(boolKey); // Read

自动氧化使您的工作非常简单 - 您甚至不需要将boolean转换为Boolean

但是,当boolean只有两个可能的值时,为什么要打扰地图?两个项目的数组和一个简单的条件性能更好:

MyType[] myArrayMap = new MyType[2];
myArrayMap[key ? 1 : 0] = newValue; // Write
MyType t = myArrayMap[key ? 1 : 0]; // Read

如果是关于Java类java.util.HashMap<K,V>,则不能,因为boolean是原始类型。您需要使用诸如Boolean

之类的类

您可以做到。实例

    Map<Boolean, String> selectedIds = new HashMap<Boolean, String>(); 

用法??

selectedIds.put(Boolean.TRUE, "stack");
selectedIds.put(Boolean.FALSE, "nostack");

这是一个很棒的问题(很有趣!)。您只需要两个项目,但是您可以将多个项目捣碎到每个值中。例如:

    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]

是的,如果您是指Boolean,则使用Capital B. A Hashmap可以将任何类型作为键。如果只允许布尔值,您的地图将只有两个可能的键:

HashMap<Boolean, ?> map = new HashMap();
map.put(Boolean.TRUE, someObject);
map.put(Boolean.FALSE, someOtherObject);
...

是。布尔原始人的布尔式包装班恰当地命名为布尔值。与往常一样,API是您最好的朋友:http://docs.oracle.com/javase/7/docs/api/java/java/lang/lang/boolean.html,但就像上面所说的那样,您的地图只会有两个条目,然后只有两个条目,这似乎很奇怪。

显然可以。

Map<Boolean, String> myMap = new HashMap<Boolean, String>();
        myMap.put(true, "A");
        myMap.put(false, "D");

最新更新