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

在Java中,Boolean/Boolean如何作为HashMap的键?,java,collections,boolean,Java,Collections,Boolean,我有一个采访问题,问布尔值是否可以作为Java中HashMap的键。我不确定这是怎么可能的,我想得到一个解释 在这个问题中,布尔或布尔的含义也不清楚。也许这两个问题都应该在一个答案中处理。你可以这样做。例如 Map<Boolean, String> selectedIds = new HashMap<Boolean, String>(); 是的,如果你的意思是布尔型,大写B。HashMap可以有任何类型作为键。如果只允许布尔值,则地图将只有两个可能的键: Ha

我有一个采访问题,问布尔值是否可以作为Java中HashMap的键。我不确定这是怎么可能的,我想得到一个解释


在这个问题中,布尔或布尔的含义也不清楚。也许这两个问题都应该在一个答案中处理。

你可以这样做。例如

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

是的,如果你的意思是布尔型,大写B。HashMap可以有任何类型作为键。如果只允许布尔值,则地图将只有两个可能的键:

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

对。布尔基元有一个名为布尔的布尔包装类。和往常一样,API是你最好的朋友:但就像上面crush所说的,你的地图只有两个条目,这似乎很奇怪。

当然你可以:

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

如果它是关于Java类Java.util.HashMap的,则不能这样做,因为boolean是一种基本类型。您需要使用诸如Boolean之类的类,显然您可以

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

这是一个伟大而有趣的故事!问题您只有两个项目,但可以将多个项目合并到每个值中。例如:

    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]


怎样将其转换为整数:true=1,false=0。在地图中只能有两个条目……我编辑了问题,但在阅读@grexter89 answer之后,我不确定我的编辑是否有效。你能确认这个问题是否是关于布尔的原始形式吗?你应该保留原来的标题:我们能在hashmap中将布尔定义为键吗?怎么…请解释一下?Java中没有名为hashmap的类。我们是否应该假设他也有一个名为hashmap的自定义类,因为它都是小写的?正如@Bohemian在另一篇评论中提到的。所以,有三个条目是可能的。这是一个很好的观点,但我从他的问题中没有发现这是关于布尔的原始形式,而不是对象形式。@crush你应该问他,或者告诉他。@crush我也没有真正理解,这就是我提到布尔的原因。在最初的帖子里布尔是用小写字母写的是的,但是在最初的帖子里所有的东西都是用小写字母写的,哈。我可以看到这个问题是关于泛型中的原语,或者泛型周期。很难说清楚。我不会费心谈论替代方案。前半部分回答了这个问题。这不是常识问题,这是一个语言问题。是的,我认为面试官想要的答案是,你不能使用原始类型keys@Alessio看看这个问题。这是布尔服务…我的假设有时是错误的;而且,你错了,它只有两个值。布尔值可以有三个:null是映射的有效键。仍然+1,只是修正一下:当我读到这个问题时,我认为布尔是写的,而不是布尔,也许这篇文章是编辑的?不管怎么说,现在已经不重要了:染料…但当我过去使用多个插入来运行它时…在输出中只得到两个键和值对,即HashMaphm=newhashmap;普特鲁先生,10岁;普特法尔斯,50岁;普特鲁先生,60岁;普特福斯,80岁;普特鲁先生,90岁;普特鲁先生,90岁;普特法尔斯,70岁;普特鲁先生,10岁;普特法尔斯,50岁;System.out.printlnHashmap值:+hm;输出:Hashmap值:{false=50,true=10}通过Hashmap中的put方法。它在方法的注释中明确提到:将指定的值与此映射中的指定键相关联。如果映射之前包含键的映射,则会替换旧值。所以,有三个条目是可能的。假设我想放更多的键、值对……那么输出是什么呢?如果我这样打印,输出是什么?system.out.printlnmbs;即将添加输出。使用Arrays.deepToStringlsTrue.toArraymbs.putnull,可以让青蛙抛出NullPointerException。
    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]