1. 程式人生 > >map中 key,value 對換 ,互換,

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];

// 這裡則可以通過map.get(key)來獲取每個對應的名字

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:李綠綠