是否有一个带有索引和键和对象的Map对象? Java的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否有一个带有索引和键和对象的Map对象? Java的相关的知识,希望对你有一定的参考价值。

我试图用Java模拟一个enigma机器的转子。我需要一个带有索引,键和对象的对象,因为我没有尝试像这样的HashMaps:

private HashMap<Integer,Integer> rotorWiring = new HashMap<Integer, Integer();
private HashMap<Integer,Integer> reverseRotorWiring = new HashMap<Integer, Integer>();

//The "wiring" of the rotor is set from a String,
    public void setRotorWiring(String Wiring) {
    if (Wiring.length()==26) {
        for (int i=0; i<Wiring.length();i++ ) {
            char tempChar = Wiring.charAt(i);
            int valueOfChar = (int)tempChar-64; 
            if (valueOfChar<=26){
                this.rotorWiring.put(i+1,valueOfChar);
                this.reverseRotorWiring.put(valueOfChar,i+1);
            }
        }
    }

}

到目前为止一切顺利,这让我可以翻译e.x.然而,一旦我试图像这样模拟一转转子,A到E:

//It should be mentioned that I designing the program to only accept characters a to z inclusive.
public void turn() {
    for (int i=1;i<=rotorWiring.size();i++) {
        if (i!=26) {
            rotorWiring.replace(i, rotorWiring.get(i+1));
        }
        else {
            rotorWiring.replace(i, rotorWiring.get(1));
        }
    }
    for (int i=1;i<=rotorWiring.size();i++) {
        if (i!=26) {
            reverseRotorWiring.replace(i, rotorWiring.get(i+1));
        }
    }
}

然而,我注意到这相当模拟了转子内部接线的偏移,而不是一个转弯......我要求一个带有索引,键和对象的“Map”式解决方案,因为这样我就可以将所有键和对象的索引偏移1,从而模拟转弯。

但是,我对这个问题的不同解决方案的建议持开放态度。

应该提到的是,我有点像新手,因此需要进行相当深入的解释。

非常感谢。

答案

欢迎来到StackOverflow。您没有在JDK中描述的实现。但是,有更多的方法来实现Integer-String-Object的存储。请注意,索引和键的定义都是唯一的。另请注意,索引键是紧密耦合的。你可能想把Map放到另一个Map

Map<Integer, Map<String, MyObject>> map;

或者使用索引的集合特征:

List<Map<String, MyObject>>

小心删除改变所有后续元素索引的项目 - 用null替换它以保留索引。或者,您可以使用索引/键为已定义的对象创建装饰器:

Map<Integer, MyDecoratedObject> map;

MyDecoratedObject的样子:

public class MyDecoratedObject {

     private final String key;      // or int index
     private final MyObject delegate;

     // Full-args constructor, getters
}

最后,您可以选择最满足您需求的方式。

另一答案

地图是解决方案!这样解决了:

    private HashMap<Integer,HashMap<Integer,Integer>> rotorWiring = new HashMap<Integer, HashMap<Integer,Integer>>();
    private HashMap<Integer,HashMap<Integer,Integer>> reverseRotorWiring = new HashMap<Integer, HashMap<Integer,Integer>>();

    public void setRotorWiring(String Wiring) {
    if (Wiring.length()==26) {
        for (int i=0; i<Wiring.length();i++ ) {
            HashMap<Integer, Integer> wire = new HashMap<Integer, Integer>();
            HashMap<Integer, Integer> reverseWire = new HashMap<Integer, Integer>();
            char tempChar = Wiring.charAt(i);
            int valueOfChar = (int)tempChar-64; 
            if (valueOfChar<=26){
                wire.put(i+1,valueOfChar);
                reverseWire.put(valueOfChar,i+1);
                rotorWiring.put(i, wire);
                reverseRotorWiring.put(i, reverseWire);
            }
        }
    }

}

以上是关于是否有一个带有索引和键和对象的Map对象? Java的的主要内容,如果未能解决你的问题,请参考以下文章

带有对象和键的 UIPicker 使用 JSON

如何与熊猫数据框中的键和键列表合并

打字稿:如何根据对象键/值类型在 ES6 映射中创建条目

空对象的索引签名和记录之间的区别?

Map集合

ES学习笔记