您的位置:首页 > 产品设计 > UI/UE

map中 key,value 对换 ,互换

2016-04-11 10:55 561 查看
当查询一些数据需要去重复的时候,有很多人想到用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:李绿绿
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: