gpt4 book ai didi

java - 同时扩展 HashMap 和 LinkedHashMap?

转载 作者:搜寻专家 更新时间:2023-11-01 03:17:43 24 4
gpt4 key购买 nike

我想延长HashMap添加方法 putIfGreaterThan它基本上检索给定键的值,如果新值大于旧值,我们用新值更新旧值。像这样:

  public void putIfGreaterThan(String key, Double value )
{

if (containsKey(key ) != true) {
put( key , value );
} else {
if (get(key ) < value) {
System. out .println("Adding new value: " + value + " to map" );
put( key , value );
} else {
System. out .println("Did not add value: " + value + " to map" );
}
}


}

上面的程序工作正常 - 但是我想将此方法添加到 HashMapLinkedHashMap .换句话说,如果有人实例化:

HashMap hashmap = new HashMap();

他们应该能够访问该方法:

hashmap.putIfGreaterThan();

如果有人实例化:

LinkedHashMap linkedhashmap = new LinkedHashMap();

他们应该能够访问该方法:

linkedhashmap .putIfGreaterThan();

如果我按如下方式创建一个新类:

MyHashMap extends HashMap<String, Double>并添加前面提到的方法 - 我只是扩展 HashMap不是 LinkedHashMap .如果我实例化 LinkedHashMap,这将不允许我访问该方法.

我正在考虑修改原始 HashMap 类中的源代码(通过添加方法 putIfGreaterThan )但是我无法修改源代码,除非我反编译整个类(当我尝试这样做时我得到一堆其他错误,所以我认为扩展 HashMap 类会更容易,但这样做意味着我不能在 putIfGreaterThanHashMap 上使用方法 LinkedHashMap

此外,如果我将该方法添加到原始类中,就可以在任何 HashMap 上调用此方法。 (即使 map 包含两个 String)但该方法仅适用于包含 String 和 Double 或 String 和 Int 的 HashMap。因此,我认为扩展原始类并使用与 HashMap 相关的方法自定义当前类更有意义。字符串和 double 。

有什么建议吗?

谢谢

最佳答案

让您的自定义 map 改为实现 Map 接口(interface),并用它包装一个由类的用户通过构造函数提供的具体 map :

public class MyMap implements Map<String, Double>{
private final Map<String, Double> map;

public MyMap(Map<String, Double> map){
this.map = map;
}

public void putIfGreaterThan(String key, Double value ){...}

@Override
public int size() {
return map.size();
}

//inherited methods
}

这个类可以这样使用:

MyMap map = new MyMap(new LinkedHashMap<>());

或:

MyMap map = new MyMap(new HashMap<>());

关于java - 同时扩展 HashMap 和 LinkedHashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42725272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com