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

containsKeyそのライブラリを使用すると、単純なcontainsValueテストのみを使用できます。

于 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 に答える