map中 key,value 對換 ,互換,
當查詢一些資料需要去重複的時候,有很多人想到用map自帶的屬性去重,因為不允許有相同的key存在,但是可以允許有相同的value存在。
例如:我想得到 手機通訊錄 中所有的電話號碼和姓名(是去重後的手機號碼,不存在相同的兩個電話號碼)
一部手機裡面有 我的電話:152****5398 (2個) 姓名 1 :李白白 姓名 2 :李黑黑
你的電話:188****8888 (1個) 姓名 1 :李藍藍
他的電話:199****9999 (10個) 姓名 1 :李赫赫............. 姓名 n :李紫紫 ............. 姓名10:李綠綠.........
每一個電話號碼對應一個姓名,如果沒有要求的話,當然得到哪一個姓名都一樣了,這個可以不用在意。
---------------------------------------------------------------------------------這是一條華麗的分割線------------------------------------------------------------------------------------------------------------------
在儲存map的時候儲存格式為<mobile,username>
這樣放在map裡面key是不會重複的,
那麼怎麼獲取到去重後的key,和對應的Value值呢?
因為我們不知道key是什麼,所有不能直接通過map.get(key)來得到Value
如果想通過key獲取Value的值,那麼可以在while的時候把key儲存到一個數組裡面
// 1,宣告一個HashMap,用來存放<key,value>Map<String, Object> map = new HashMap<String, Object>();
map.put("152****5398", "李白白");
map.put("152****5398", "李黑黑");
map.put("188****8888", "李藍藍");
map.put("199****9999", "李綠綠");
// 宣告一個Set存放map的key
Set set = map.keySet();
Iterator iterator = set.iterator();
String key = null;
int k = 0;
// 在這裡宣告一個字串陣列,長度為去重後map的長度
String numberData[] = new String[map.size()];
while (iterator.hasNext())
{
key = (String) iterator.next();
// 這裡迴圈儲存key到陣列
numberData[k] = key;
// 每次迴圈自加
k++;
}
String number = null;
String userName = null;
int numberDataLength = numberData.length;
// 迴圈得到的陣列,取得陣列中儲存的key
for (int j = 0; j < numberDataLength; j++)
{
if (map != null)
{
// 這樣每次迴圈得到電話(去重)
number = numberData[j];
userName = (String) map.get(numberData[j]);
System.out.println("number:" + numberData[j] + "\t userName:"+ (String) map.get(numberData[j]));
}
}
去重後結果:
number:188****8888userName:李藍藍
number:152****5398userName:李黑黑
number:199****9999userName:李綠綠