gpt4 book ai didi

java - Google 集合中 BiMap 的精髓

转载 作者:行者123 更新时间:2023-12-02 16:57:03 26 4
gpt4 key购买 nike

我对BiMap仍然很困惑在 Google collections/Guava 。据称,这两个 bimap 有相同的数据支持;对其中一个的任何更改都会出现在另一个中。

浏览了一下源码,发现ForwardingMap中使用了delegate。但在 StandardBiMap 的任何实际子类中,我确实看到数据被放入正向和反向 map 中。那么本质是什么,为什么它声称通过只保留一份数据来节省空间?是否只是实际对象是一组,但仍然需要对这些对象的两组不同的引用,一组在正向映射中维护,另一组在反向映射中维护? BiMap 的本质是什么,与客户端仅维护过于独立的 map 并进行相应更新的替代方法相比?

  private V putInBothMaps(K key, V value, boolean force) {
boolean containedKey = containsKey(key);
if (containedKey && Objects.equal(value, get(key))) {
return value;
}
if (force) {
inverse().remove(value);
} else if (containsValue(value)) {
throw new IllegalArgumentException(
"value already present: " + value);
}
V oldValue = super.put(key, value);
updateInverseMap(key, containedKey, oldValue, value);
return oldValue;
}

最佳答案

您在哪里看到 BiMap 通过仅保留一份数据副本来节省空间的说法? BiMap 仅提供一组条目的正向和反向 View ,这些 View 在数据更改时保持一致。节省的地方在于不必手动管理两个映射并确保两个映射都在您自己的代码中更新(加上对将重复值添加到其中一个映射的情况进行错误检查,从而导致状态不一致)...只需使用BiMap 并让一切为您处理。

这不是为了节省空间,而是为了保持代码简单、可读且正确。

关于java - Google 集合中 BiMap 的精髓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10837699/

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