gpt4 book ai didi

java - 为没有键的 Map 实现 entrySet

转载 作者:行者123 更新时间:2023-11-29 05:57:21 26 4
gpt4 key购买 nike

我写了一个TrieMap<V> implements Map<String,V>显然是从字符串键入的类。这很好用。

我想增强它以使用更通用的 CharSequence 作为键控.我相信除了最后一个问题,我已经设法实现了转换,我无法创建 K 类型的对象.

因此签名现在必须变为 TrieMap<K extends CharSequence,V> implements Map<K,V> .问题是,我相信你知道,一个 TrieMap实际上并不存储原始 key 。 (事实上​​,这是它的主要值(value)之一,因此它通常比普通 map 占用更少的空间。)

实现Set<Entry<K, V>> entrySet()因此,我必须以某种方式制造 K 类型的对象.有什么办法可以实现吗?

最佳答案

我将定义以下接口(interface):

public interface KeyBuilder<K extends CharSequence> {
public K build(CharSequence value);
}

并为 TrieMap 构造函数提供接口(interface)的实现。当你需要建立一个新的 K 实例时,你要求接口(interface)来做。

您可以使用更适合您的数据结构的东西作为 build 方法的参数,CharSequence 只是一种可能。如果你想做一些更复杂的事情,你可以这样构造它:

public interface KeyFactory<K extends CharSequence> {
public KeyBuilder<K> newBuilder();
}

public interface KeySequence<K extends CharSequence> {
public KeySequence<K> append(char value);
public K build();
}

使用 String 实现:

public class StringKeyFactory<String> {
public KeyBuilder<String> newBuilder() {
return new KeyBuilder<String>() {
private final StringBuilder s = new StringBuilder();
public KeySequence<String> append(char value) {
s.append(value);
return this;
}
public String build() {
return s.toString();
}
};
}
}

关于java - 为没有键的 Map 实现 entrySet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11563598/

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