我想覆盖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方法。现在我想声明给定的键在我的方式是相同的。请建议是否有办法这样做?
答案 0 :(得分:2)
您可以创建自己的自定义String
类,其中包含String
成员,并根据需要实施equals
和hashCode
,并使用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)
由于评论已经声明要使用hashcode
和equals
创建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 ;;