如何覆盖String类的hashcode方法?

时间:2016-10-26 06:53:56

标签: java

我想覆盖String类Hashcode / Equals方法,因为我知道String类是final,并且内部的方法无法覆盖。我有一个场景,我想应用相同的。例如,代码如下,

public static void main(String[] args) {

        Map<String,Integer> map = new HashMap();
        map.put("Mukul", 1);
        map.put("Aditya", 1);

        System.out.println(map);


    } 

当我将字符串作为键传递时,map将隐式调用String类hashcode方法。现在我想声明给定的键在我的方式是相同的。请建议是否有办法这样做?

3 个答案:

答案 0 :(得分:2)

您可以创建自己的自定义String类,其中包含String成员,并根据需要实施equalshashCode,并使用Map<MyString,Integer>

public class MyString {

    private String value;

    public MyString (String value) {this.value = value;}
    public int hashCode () {
        ...
    }
    public boolean equals (Object other) {
        ...
    }

    public static void main(String[] args) {

        Map<MyString,Integer> map = new HashMap<>();
        map.put(new MyString("Mukul"), 1);
        map.put(new MyString("Aditya"), 1);

        System.out.println(map);
    } 
}

答案 1 :(得分:1)

由于评论已经声明要使用hashcodeequals创建TreeMap类的包装,这是另一种解决方案:您可以使用Comparator,并提供您自己的TreeMap<String, Integer> myMap = new TreeMap<String, Integer>(new Comparator<Entry<String, Integer>>() { public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { return o1.getValue().compareTo(o2.getValue()); // your method here } });

data-sap-ui-xx-bindingSyntax="complex"

(灵感来自Java TreeMap Comparator

答案 2 :(得分:0)

没有办法用字符串而不是创建自己的对象并在从map获取数据后处理它。即使你创建了自己的字符串类然后它赢了; t与已经存在的字符串类兼容 就像没有MyString obj =&#34; name&#34 ;;