2014-01-31 38 views
0

我有一個面試問題,詢問是否Boolean可以作爲Java中的HashMap的關鍵。我不確定這是怎麼可能的,並且想要一個解釋。Boolean/boolean如何作爲Java中的HashMap的關鍵字?

目前還不清楚booleanBoolean是否意味着在這個問題。也許兩者都應該在答案中處理。

+3

如何?將它轉換爲一個整數:'true' = 1,'false' = 0.你只能在地圖中有兩個條目... – crush

+0

我編輯了這個問題,但在閱讀@ grexter89答案後,我不確定我的編輯是否有效。你能否確認問題是否是關於'boolean'的原始形式? – crush

+0

你應該保留標題,因爲它是 – 2014-01-31 14:34:39

回答

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] 
+2

正如@Bohemian在另一條評論中提到的,[使用'null'作爲鍵也是可以接受的](http://ideone.com/0NWuce)。所以,三個條目是可能的。 – crush

+0

假設我想放更多的鍵,值對....那麼輸出是什麼? 如果我打印這樣會輸出什麼?
system.out.println(mbs);
user3257654

+0

關於添加輸出。 – aliteralmind

3

你可以做that.For例如

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

用法?

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

是的,如果你的意思是布爾型,大寫字母B.一個HashMap可以有任何類型作爲關鍵字。如果只允許布爾值,您的地圖將只有兩個可能的鍵:

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

當然可以:

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

自動裝箱,使你的工作很簡單 - 你甚至都不需要boolean轉換爲Boolean

但是,爲什麼還要用地圖,boolean只有兩個可能的值?如果它是關於Java類

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

例如地圖<布爾,列表> ... – Alessio

+0

我不會討論替代方案。上半場回答了這個問題。這不是常識,而是一個語言問題。 – Bohemian

+0

是的我認爲面試官想要回答你不能使用原始類型作爲鍵 – Alessio

3

java.util.HashMap<K,V>你不能,因爲boolean是基本類型:兩個項目,一個簡單的條件數組會表現得更好。你需要使用類如Boolean

+0

這是一個很好的觀點,但我沒有從他的問題中得到它是關於'boolean'的原始形式,而不是對象形式。 – crush

+0

@crush你應該問他,或告訴他。 – nos

+0

@crush我沒有(真的)得到它,這就是爲什麼我提到'布爾'。在原來的帖子中布爾值是用小寫字母 – grexter89

0

顯然你可以。

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

是....但是當我使用與多個插入運行這個......在輸出我得到只有兩個鍵和值對


的HashMap <布爾,整數> HM =新的HashMap <布爾,整數>();
\t \t hm.put(true,10);
\t \t hm.put(false,50);
\t \t hm.put(true,60);
\t \t hm.put(false,80);
\t \t hm.put(true,90);
\t \t hm.put(true,90);
\t \t hm.put(false,70);
\t \t hm.put(true,10);
\t \t hm.put(false,50);
\t \t System.out.println(「Hashmap Values:」+ hm);



OUTPUT:哈希映射值:{FALSE = 50,真= 10} – user3257654

+0

經過HashMap中內部的put方法。它在方法的評論中明確提到:「將指定的值與此映射中指定的鍵相關聯,如果映射先前包含該鍵的映射,則舊值將被替換。」 – Zeeshan