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****9999 userName:李绿绿

你可能感兴趣的:(map中 key,value 对换 ,互换)