返回值反转的java集合

返回值反转的java集合,java,data-structures,collections,Java,Data Structures,Collections,是否有按以下方式工作的集合: //什么时候 value1 -> value2 value3 -> value4 //所以 value2 is the opposite of value1 and value4 is the opposite of value3 //然后 这些请求的作用如下: request in:value1 return out:value2 request in:value2 return out:value1 等 我想我可以用函数来完成这一点,但我想知

是否有按以下方式工作的集合:

//什么时候

value1 -> value2 
value3 -> value4
//所以

value2 is the opposite of value1
and
value4 is the opposite of value3
//然后 这些请求的作用如下:

request in:value1 return out:value2
request in:value2 return out:value1


我想我可以用函数来完成这一点,但我想知道是否有专门的收集来实现这一点

您似乎在寻找一个可逆映射。这一点已经进行了详细讨论:

前面讨论的链接之一是Apache解决方案:

虽然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);
    }
}
公共类BiDiMap{
private final Map forwardMap=新HashMap();
私有最终映射reverseMap=newHashMap();
公开认沽期权(T1、T2){
T2 oldT2=forwardMap.put(t1,T2);
T1 oldT1=反向映射放置(t2,T1);
}
公共空间移除(T1、T2){
T2 current2=forwardMap.get(t1);
如果(当前t2!=t2){
//这是一个错误。
}
T1电流T1=反向映射获取(t2);
如果(当前t1!=t1){
//这也是一个错误。
}
移除(t1);
反向映射移除(t2);
}
公共T2快进(T1){
返回forwardMap.get(t1);
}
公共T1反向(T2){
返回反向映射get(t2);
}
}
等等


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

value1->value2是什么意思?我发现这个问题不清楚。如果这只是您事先准备的数据,您可能只需要创建一个映射,并使用两个
put
操作为每对输入条目。但是如果您需要一个完整的API,我相信您必须编写一个更全面的包装器。集合类和反向值之间有什么联系?