java - Hashtable - 获取索引之前的第一个元素
问题描述
我有这个哈希表:
private final Hashtable<Integer,Character> htable = new Hashtable<>();
我在表中存储了一些元素,其索引可能达到很高的范围。然后,当我想获得一个项目时,如果它不存在,我想先获得第一个现有的。
一种天真的方法可能是:
int index = given_index;
while(htable.get(index) == null && index >= 0)
index --;
这样做可能会计算大量的值。有没有更好的策略,或者可能是另一种允许计算更少的表?
解决方案
NavigableMap(如 user15358848 评论中所述)
参考:NavigableMap
通常,实现不应该支持null
值。如果有支持 的实现null
,则无法检查响应null
是由于缺少还是由于实际值。
较低的入口
返回与严格小于给定键的最大键关联的键值映射,如果没有这样的键,则返回 null。
get
键值- 如果获取的值是
null
,则获取lowerEntry
getOrDefault(key, navigableMap.lowerEntry(index))
如果实际密钥主要是由于额外的navigableMap.lowerEntry
调用而出现的,那将是昂贵的
Character value = navigableMap.get(index);
if (value == null) {
value = navigableMap.lowerEntry(index);
}
return value;
楼层入口
返回与小于或等于给定键的最大键关联的键值映射,如果没有这样的键,则返回 null。
- 阅读使用
floorEntry
- 如果非空条目,则返回值
- 否则返回
null
Map.Entry<Integer, Character> entry = navigableMap.floorEntry(index);
return null != entry ? entry.getValue() : null;
推荐阅读
- android - mediaplayer.start() 和 mediaplayer.pause() 使应用程序崩溃
- reactjs - 如何在 react-redux 应用程序中读取更新状态?
- python - 使用 pandas 转换 DataFrame
- select - 从Angular6模板中的选择下拉列表中选择项目时使部分可见
- swift - 我如何从 SafariExtensionHandler 向页面上的注入脚本发送消息
- alexa - 从 JSON 请求中识别 Alexa 设备的类型
- ios - 如何在没有 Macbook 的 iOS 设备上安装 iOS 应用程序?
- git - 结账是什么意思?
- r - 重塑起始目的地数据
- python - geopandas:创建的克隆会破坏父文件的属性