栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java中的双向多值映射

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中的双向多值映射

因此,你需要多对多关系的支持吗?你可以得到的最接近的是Guava,Multimap就像@Mechkov所写的-但更具体地讲是

Multimap
与组合
Multimaps.invertFrom
“ BiMultimap”
尚未实现,但在
Google Guava
库中请求此功能时存在问题。

此时,你有几种选择:

如果你的“ BiMultimap”将变为不可变常量,请使用

Multimaps.invertFrom和ImmutableMultimap/ ImmutableListMultimap/ ImmutableSetMultimap
(这三个中的每个都有不同的集合存储值)。一些代码(示例取自我开发的应用程序,使用
Enum
Sets.immutableEnumSet
):

public class RolesAndServicesMapping {    private static final ImmutableMultimap<Service, Authority> SERVICES_TO_ROLES_MAPPING =          ImmutableMultimap.<Service, Authority>builder() .put(Service.SFP1, Authority.ROLE_PREMIUM) .put(Service.SFP, Authority.ROLE_PREMIUM) .put(Service.SFE, Authority.ROLE_EXTRA) .put(Service.SF, Authority.ROLE_STANDARD) .put(Service.SK, Authority.ROLE_STANDARD) .put(Service.SFP1, Authority.ROLE_ADMIN) .put(Service.ADMIN, Authority.ROLE_ADMIN) .put(Service.NONE, Authority.ROLE_DENY) .build();    // Whole magic is here:    private static final ImmutableMultimap<Authority, Service> ROLES_TO_SERVICES_MAPPING = SERVICES_TO_ROLES_MAPPING.inverse();    // before guava-11.0 it was: ImmutableMultimap.copyOf(Multimaps.invertFrom(SERVICES_TO_ROLES_MAPPING, HashMultimap.<Authority, Service>create()));    public static ImmutableSet<Authority> getRoles(final Service service) {        return Sets.immutableEnumSet(SERVICES_TO_ROLES_MAPPING.get(service));    }    public static ImmutableSet<Service> getServices(final Authority role) {        return Sets.immutableEnumSet(ROLES_TO_SERVICES_MAPPING.get(role));    }}

如果你确实希望Multimap是可修改的,那么除非同时进行修改

kToVMultimap
invertFrom
每次都想调用其反向副本(并且使该副本不可修改),否则很难同时维护
K-> V
V-> K
变体。以确保你不小心不修改vToKMultimap不会更新的内容
kToVMultimap
)。这不是最佳选择,但在这种情况下应该这样做。

(可能不是你的情况,提到了额外的好处):BiMap接口和实现类具有在之后.inverse()提供BiMap视图的方法。如果我之前提到的这个问题解决了,它可能会有类似的情况。

BiMap<K, V>biMap.inverse().inverse()

总体而言,common.graph支持以下品种的图形:

  • 有向图
  • 无向图
  • 具有相关值(权重,标签等)的节点和/或边
  • 不允许/不允许自循环的图形
  • 不允许/不允许平行边的图(具有平行边的图有时称为多图)
  • 节点/边按插入顺序排列,排序或无序的图


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/420409.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号