2012-02-26 33 views
0

的Hashmap如下图所示创建我创建一个HashMap:使用现有的HashMap

Map<String, String> streetno = new HashMap<String, String>(); 

streetno.put("3", "Sachin"); 
streetno.put("2", "Dravid"); 
streetno.put("1", "Sehwag"); 
streetno.put("5", "Laxman"); 
streetno.put("4", "Kohli"); 

现在我想创建一个新的HashMap,其中上述的HashMap的关键变成使用价值和价值成为关键,如下图所示:

Map<String, String> streetname = new HashMap<String, String>(); 

streetname.put("Sachin", "3"); 
streetname.put("Dravid", "2"); 
streetname.put("Sehwag", "1"); 
streetname.put("Laxman", "5"); 
streetname.put("Kohli", "4"); 

我不知道该怎么做..任何人都可以帮助我走出这个..

+1

请注意,番石榴,谷歌集合api,支持BiMap的概念,支持'inverse()'操作来做到这一点。有用的是它没有复制数据。请参阅[这里](http://docs.guava-libraries.googlecode.com/git-history/v11.0.1/javadoc/com/google/common/collect/BiMap.html#inverse())了解详细信息 – sw1nn 2012-02-26 14:33:07

回答

4
Map<String, String> streetname = new HashMap<String, String>(); 

for (Entry<String,String> e : streetno.entrySet()) { 
    streetname.put(e.getValue(), e.getKey()); 
} 

这里,for循环遍历所有条目(即键/值对),并将它们插入到第二个映射中,并将键和值交换。

检查put()返回null可能是一个好主意。如果您得到一个非空值,这意味着streetno中的值不是唯一的。既然这是作业,我会让你找出结果,以及如何最好地处理这个问题。

+2

啊!当有人解决作业时,我不喜欢它。帮助一下,但不要做所有的工作。毕竟这是作业,这样学生会付出一些努力。 – 2012-02-26 14:29:24

+2

我希望你的原创价值是独一无二的;否则你失去了数据 – Tom 2012-02-26 14:29:27

2

完美的你几乎在那里。现在,你需要遍历第一哈希映射按键和模拟你在这5行做了什么:

streetname.put("Sachin", "3"); 
streetname.put("Dravid", "2"); 
streetname.put("Sehwag", "1"); 
streetname.put("Laxman", "5"); 
streetname.put("Kohli", "4"); 

提示:遍历所有的地图可能是你有点棘手,但通常是这样完成的:

for (String key : streetno.keySet()) { 
... 
} 

祝您的作业顺利!

+0

你不知名的downvoter,我做了什么坏事? – 2012-02-26 14:32:45

+1

我没有倒下你,但是...也许downvoter冒犯了'streetno.keySet()'你真的应该使用'streetno.entrySet()',否则你将不得不再次访问地图以获取价值。 – 2012-02-26 14:36:14

+0

这是真的,可能会慢一点,但我认为这对于作业来说足够好。我想避免'entrySet',因为我害怕我会混淆学生(我不知道他的专业水平)。即使使用我的解决方案,复杂度仍然保持O(n)。 – 2012-02-26 14:39:25

0

的Java 8:

Map<String, String> streetname = 
    streetno.entrySet() 
      .stream() 
      .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); 

注:

如果你想使用的parellelstream()代替stream()三思而后行。这只适用于你的Map非常大。