我有一個面試問題,詢問是否Boolean
可以作爲Java中的HashMap
的關鍵。我不確定這是怎麼可能的,並且想要一個解釋。Boolean/boolean如何作爲Java中的HashMap的關鍵字?
目前還不清楚boolean
或Boolean
是否意味着在這個問題。也許兩者都應該在答案中處理。
我有一個面試問題,詢問是否Boolean
可以作爲Java中的HashMap
的關鍵。我不確定這是怎麼可能的,並且想要一個解釋。Boolean/boolean如何作爲Java中的HashMap的關鍵字?
目前還不清楚boolean
或Boolean
是否意味着在這個問題。也許兩者都應該在答案中處理。
這是一個很好的(而且非常有趣!)問題。你只會有兩個項目,但你可以將多個項目混合到每個值中。例如:
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]
正如@Bohemian在另一條評論中提到的,[使用'null'作爲鍵也是可以接受的](http://ideone.com/0NWuce)。所以,三個條目是可能的。 – crush
假設我想放更多的鍵,值對....那麼輸出是什麼? 如果我打印這樣會輸出什麼?
system.out.println(mbs); –
user3257654
關於添加輸出。 – aliteralmind
你可以做that.For例如
Map<Boolean, String> selectedIds = new HashMap<Boolean, String>();
用法?
selectedIds.put(Boolean.TRUE, "stack");
selectedIds.put(Boolean.FALSE, "nostack");
是的,如果你的意思是布爾型,大寫字母B.一個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/lang/Boolean.html但是像上面說的那樣,你的地圖只有兩個條目,這看起來很奇怪。
當然可以:
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
顯然你可以。
Map<Boolean, String> myMap = new HashMap<Boolean, String>();
myMap.put(true, "A");
myMap.put(false, "D");
是....但是當我使用與多個插入運行這個......在輸出我得到只有兩個鍵和值對
即
的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
經過HashMap中內部的put方法。它在方法的評論中明確提到:「將指定的值與此映射中指定的鍵相關聯,如果映射先前包含該鍵的映射,則舊值將被替換。」 – Zeeshan
如何?將它轉換爲一個整數:'true' = 1,'false' = 0.你只能在地圖中有兩個條目... – crush
我編輯了這個問題,但在閱讀@ grexter89答案後,我不確定我的編輯是否有效。你能否確認問題是否是關於'boolean'的原始形式? – crush
你應該保留標題,因爲它是 – 2014-01-31 14:34:39