为了账号安全,请及时绑定邮箱和手机立即绑定

返回值反转的java集合

返回值反转的java集合

扬帆大鱼 2022-11-02 10:28:32
是否有一个按以下方式工作的集合://什么时候value1 -> value2 value3 -> value4//以便value2 is the opposite of value1andvalue4 is the opposite of value3//那么请求应该如下工作:request in:value1 return out:value2request in:value2 return out:value1ETC我想我可以用函数来做到这一点,但想知道是否有专门的集合。
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

您似乎正在寻找可逆映射。已经对此进行了详细讨论:Java invert map

先前讨论的链接之一是 Apache 解决方案:https ://commons.apache.org/proper/commons-collections/javadocs/api-3.2.2/org/apache/commons/collections/BidiMap.html 。

虽然 java 没有有效处理此问题的集合类型,但您可以通过将两个映射放在一起来自己制作一个:

public class BiDiMap<T1, T2> {

    private final Map<T1, T2> forwardMap = new HashMap<T1, T2>();

    private final Map<T2, T1> reverseMap = new HashMap<T2, T1>();


    public void put(T1 t1, T2 t2) {

        T2 oldT2 = forwardMap.put(t1, t2);

        T1 oldT1 = reverseMap.put(t2, t1);

    }

    public void remove(T1 t1, T2 t2) {

        T2 currentT2 = forwardMap.get(t1);

        if ( currentT2 != t2 ) {

            // This is an error.

        }

        T1 currentT1 = reverseMap.get(t2);

        if ( currentT1 != t1 ) {

            // Also an error.

        }

        forwardMap.remove(t1);

        reverseMap.remove(t2);

    }

    public T2 getForward(T1 t1) {

        return forwardMap.get(t1);

    }

    public T1 getReverse(T2 t2) {

        return reverseMap.get(t2);

    }

}

等等。


这假设映射是一对一的。如果映射是一对多、多对一或多对多,则实现是不同的。


查看完整回答
反对 回复 2022-11-02
  • 1 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信