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****8888
userName:李蓝蓝

number:152****5398
userName:李黑黑

number:199****9999
userName:李绿绿

时间: 2024-10-03 23:00:17

map中 key,value 对换 ,互换,的相关文章

基于C++ map中key使用指针问题的详解_C 语言

C++实际开发的过程会经常使用到map.map是一个key-value值对,key唯一,可以用find进行快速的查找.其时间复杂度为O(logN),如果采用for循环进行遍历数据时间复杂度为O(N).如果map中的数据量比较少时,采用find和for循环遍历的效率基本没有太大的区别,但是在实际的开发过程中,存储在map中的数据往往是大量的,这个时候map采用find方式效率比遍历效率高的多. 确定采用find方式查找数据后,我们需要考虑存储map的空间复杂度,对于基础数据类型的数据(int ch

Map中查询对象

问题描述 我在map中key存放对象的主键值,value存放对象(不知道对象有几个属性).我要可以实现任意一个属性或属性的任意组合在map中查询对象.可以写多个方法. 问题补充:AngelAndAngel 写道 解决方案 假如要足够动态的话 用反射实现 你的value不是存入的对象吗,那么在传入属性名和值之后,根绝对象的getFields()得出所有属性来匹配,匹配出来的属性(一个或者多个)动态调用get方法,然后和你传入的值来做比较,假如符合,则是此主键索引的对象.这里要注意的就是,你传入的值

【方法1】删除Map中Value重复的记录,并且只保留Key最小的那条记录

介绍     晚上无聊的时候,我做了一个测试题,测试题的大体意思是:删除Map中Value重复的记录,并且只保留Key最小的那条记录. 例如: I have a map with duplicate values:     ("A", "1");     ("B", "2");     ("C", "2");     ("D", "3");    

【方法2】删除Map中Value重复的记录,并且只保留Key最小的那条记录

根据guigui111111的建议:先把Map按Key从大到小排序,然后再把Key和Value互换.这也是一种很好的思路,我写了一下代码,顺便贴上来,供大家参考与分享. package shuai.study.map; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import j

google maps-如何在 google map 中找 API key ?

问题描述 如何在 google map 中找 API key ? <?xml version=""1.0"" encoding=""utf-8""?><com.google.android.maps.MapView xmlns:android=""http://schemas.android.com/apk/res/android"" android:id="

分布式Map中实现引用计数

前言 在<ReferenceCountSet无锁实现>中,详细介绍了如何在一个进程中实现一个无锁版本的ReferenceCountSet(或者说是在自己的代码里没有锁),但是最近遇到一个问题,如果是在分布式的环境中呢?如何实现这个引用计数?这个问题如果从头开始写,会是一个比较复杂的问题,在实际中,我们可以使用ZooKeeper设置时的version机制来实现,即CAS(Compare-And-Set).这是一个本人在实际项目中遇到的一个问题,但是会更简单一些,因为在我们的项目中,我们使用Gem

android map如何获得Google Map API key

首先要做的是获取一个MD5 key(当然,他是通过JDK的keytool工具(keytool.exe)实现的) 1.在这里,主要有两方面的工作 keytool.debug.keystore 2.首先,找到debug.keystore!(进入Eclipse开发环境,然后选择Window-->Preferences-->Android-->Build,这时候我们可以看到界面中的Default debug keystore,它后面方框中的内容就是debug.keystore的路径).在此,我们

java8 使用Map中的computeIfAbsent方法构建本地缓存,提高程序效率

一.概念及使用介绍       在JAVA8的Map接口中,增加了一个方法computeIfAbsent,此方法签名如下: public V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)      Map接口的实现类如HashMap,ConcurrentHashMap,HashTable等继承了此方法,通过此方法可以构建JAVA本地缓存,降低程序的计算量,程序的复杂度,使代码简洁,易懂.    

java map中遍历和list

问题描述 java map中遍历和list map.put(""k_""+entryt.getKey() list);怎么只输出10条数据 解决方案 Iterator it=map.keySet().iterator();int i=1: while(it.hasNext()){if(i>10){break;}System.out.println(""键:""+it.next()) i++; } 解决方案二: Map&l