我是收藏世界的新bie但是,在我的下层课程中我有哈希表,因为我必须选择哈希表,我想要检索值的关键基础,下面是我的班级。
public class KeyFromValueExample
{
public static void main(String args[])
{
Hashtable table = new Hashtable();
table.put("Sony", "Bravia");
table.put("Samsung", "Galaxy");
table.put("Nokia", "Lumia");
System.out.println("does hash table has Lumia as value : " + table.containsValue("Lumia"));
System.out.println("does hash table Lumia as key : " + table.containsKey("Lumia"));
//finding key corresponding to value in hashtable - one to one mapping
String key= null;
String value="Lumia";
for(Map.Entry entry: table.entrySet()){
if(value.equals(entry.getValue())){
key = entry.getKey();
break; //breaking because its one to one map
}
}
System.out.println("got key from value in hashtable key: "+ key +" value: " + value);
//finding key corresponding to value in hashtable - one to many mapping
table.put("HTC", "Lumia");
Set keys = new HashSet();
for(Map.Entry entry: table.entrySet()){
if(value.equals(entry.getValue())){
keys.add(entry.getKey()); //no break, looping entire hashtable
}
}
System.out.println("keys : " + keys +" corresponding to value in hash table: "+ value);
输出: -
does hash table has Lumia as value : true
does hash table has Lumia as key : false
got key from value in hashtable key: Nokia value: Lumia
keys : [Nokia, HTC] corresponding to value in hash talbe: Lumia
现在请建议有没有其他更好的方法来实现同样的目的,请告知是否有其他更好的选择。
答案 0 :(得分:2)
这对我来说非常明显。我不确定是否有更有效的方法,但是如果你需要查找值来定期查找键,那么你使用的地图类型是错误的。我建议您将值转换为键,然后改为Map<String, Set<String>>
答案 1 :(得分:1)
如果您的地图同时具有唯一键和值,请考虑使用Guava集合中的BiMap - &gt; http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/BiMap.html
使用该库,您只需使用简单的containsKey
和containsValue
测试。
答案 2 :(得分:0)
我不知道这是不是你想要的,但为什么不扭转你的关键和价值观呢?所以,你可以使用
table.put("Lumia", new List<String>("HTC", "Nokia"));
如果上面是合法的,那就是这样的。
答案 3 :(得分:0)
Is there a way to find the key of a particular value in HashTable without iterator??
like String getvalue(key); ??
for(Map.Entry entry: table.entrySet()){
if(value.equals(entry.getValue())){
keys.add(entry.getKey()); //no break, looping entire hashtable
}
}