0

重複の可能性:
HashMap キーとして大文字と小文字を区別しない文字列

キーとして文字列、値として整数を持つハッシュマップがあります。ここで、get メソッドを使用して値を取得しています。ここで、文字列はキー値と一致します。


HashMap<String,Integer> map= new HashMap<String,Integer>();
// Populate the map

System.out.println(map.get("mystring"));

この文字列比較で大文字と小文字を区別しないようにします。とにかく私はそれを行うことができますか?


たとえば、次の場合に同じ結果を返すようにします。


map.get("hello");
map.get("HELLO");
map.get("Hello");
4

5 に答える 5

3

パフォーマンスが重要でない場合は、TreeMapを使用できます。以下のコードの出力:

1
6
6

必要な動作はMap#get契約に準拠していないことに注意してください。

より正式には、このマップに (key==null ? k==null : key.equals(k)) となるキー k から値 v へのマッピングが含まれている場合、このメソッドは v を返します。それ以外の場合は null を返します。(このようなマッピングは最大で 1 つ存在できます。)

public static void main(String[] args) {
    Map<String, Integer> map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);

    map.put("hello", 3);
    map.put("HELLO", 6);
    System.out.println(map.size());
    System.out.println(map.get("heLLO"));
    System.out.println(map.get("hello"));
}
于 2012-09-25T17:22:29.400 に答える
1
HashMap<InsensitiveString,Integer> map= new HashMap<>();

map.get(new InsensitiveString("mystring"));

---

public class InsensitiveString

    final String string;

    public InsensitiveString(String string)
        this.string = string;

    public int hashCode()
        calculate hash code based on lower case of chars in string

    public boolean equals(Object that)
        compare 2 strings insensitively
于 2012-09-25T17:32:50.987 に答える
1

できるよ

Map<String,Integer> map= new HashMap<String,Integer>() {
    @Override
    public Integer put(String key, Integer value) {
      return super.put(key.toLowerCase(), value);
    }

    @Override
    public Integer get(Object o) {
       return super.get(o.toString().toLowerCase());
    }
};
于 2012-09-25T17:18:23.973 に答える
1

HashMap をラップし、get メソッドと put メソッドを実装するラッパー クラスを作成できます。

于 2012-09-25T17:18:45.030 に答える
0

String以下のように配置するラッパーメソッドを記述します

map.put(string.toLowerCase());

メソッドを取得する

map.get(string.toLowerCase());
于 2012-09-25T17:21:44.173 に答える