是否有一个带有索引和键和对象的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的的主要内容,如果未能解决你的问题,请参考以下文章