当查询一些数据需要去重复的时候,有很多人想到用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****8888
userName:李蓝蓝
number:152****5398
userName:李黑黑
number:199****9999
userName:李绿绿