2

我是收藏界的新手,但仍然,在我下面的课程中,我有哈希表,因为我必须选择哈希表,并且我想根据值检索键,下面是我的课程..

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

现在请告知是否有其他更好的方法来实现相同的目标,请告知是否有其他更好的选择。

4

4 回答 4

2

这看起来很明显它对我做了什么。我不确定是否有更有效的方法,但也许如果您需要定期查找值以找到键,那么您使用的映射类型是错误的。我建议您将值转换为键并Map<String, Set<String>>改为

于 2013-02-26T17:09:51.057 回答
1

如果您的地图同时具有唯一键和值,请考虑使用 Guava 集合中的 BiMap -> http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/BiMap.html

使用该库,您可以只使用简单containsKeycontainsValue测试。

于 2013-02-26T17:09:07.867 回答
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
            }
        }
于 2013-03-12T13:04:23.107 回答
0

我不知道这是否是你想要的,但你为什么不反转你的键和值呢?所以,你可以使用

table.put("Lumia", new List<String>("HTC", "Nokia")); 

如果上面是合法的,那么类似的东西。

于 2013-02-26T17:09:39.920 回答