亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

返回值反轉的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 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號