Есть ли объект Map с индексами, ключами и объектами?Джава - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь эмулировать ротор машины загадки в Java.Мне нужен объект, который получает индекс, ключ и объект, потому что я безуспешно пробовал 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);
            }
        }
    }

}

Пока все хорошо, это позволяет мне переводить ex 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));
        }
    }
}

Однако я заметил, что это скорее симулирует смещение внутренней проводки ротора, а не поворот ... Язапрашивать решения типа «Карта» с индексом, ключом и объектом, потому что это позволило бы мне сместить индекс всех ключей и объектов на 1, имитируя поворот.

Я, однако,Открыты для предложений по различным решениям этой проблемы.

Следует отметить, что я немного новичок, и поэтому ценю довольно подробные объяснения.

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Карта карт была решением!Это было решено так:

    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);
            }
        }
    }

}
0 голосов
/ 24 августа 2018

Добро пожаловать в 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
}

Наконец, вам решатьвыберите способ, наиболее соответствующий вашим требованиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...