Java HashMap добавить ключ +1 к каждому новому значению? - PullRequest
0 голосов
/ 28 апреля 2020

Я пишу программу на Java. Эта программа должна обрабатывать множество различных значений. Я решил использовать HashMap, как вы можете видеть здесь:

public static Map<String, Map<Integer, String>> users = new HashMap<>();

Итак, как вы видите, у меня есть карта с 2 ключами. Первый ключ решает о моем "втором HashMap". Я надеюсь, что вы поняли это, потому что теперь здесь моя проблема.

public class test {

public static Map<Plot, Map<Integer, Player>> users = new HashMap<>();
public void test(String first, String second) {

if(users.get(first).isEmpty() {
users.computeIfAbsent(first, (a)->new HashMap<>()).put(0, null);
}

if(!users.get(first).containsValue(second)) {
users.computeIfAbsent(first, (a)->new HashMap<>()).put(/*my problem*/, second);
    }
  }
}

Итак, в последнем if-утверждении есть комментарий. Я не знаю, что я должен написать там? Этот метод вызывается другим классом, но это не имеет значения. Моя цель состоит в том, чтобы в каждой строке (первый ключ) было сохранено определенное целое число (второй ключ) с определенным значением (вторая строка в моем методе). Конечно, я хочу, чтобы каждая строка начиналась с 0 и имела свой хронологический порядок. Но помните, вы не можете использовать в начале класса обычный Integer-var, потому что если вы будете использовать его для каждого ключа, это не решит мою проблему.

1 Ответ

3 голосов
/ 28 апреля 2020

Если я правильно вас понимаю, «внутренняя карта» (с типом Map<Integer, String>) всегда будет придерживаться следующего правила:

Ключи карты всегда будут охватывать закрытый диапазон от 0 к его размеру. Например, внутренняя карта размером 8 будет иметь в качестве ключей: `[0, 1, 2, 3, 4, 5, 6, 7].

Если я правильно проанализировал ваш вопрос, вы ... . составил список . Семантически говоря, список IS : вещь, которая 'отображает' закрытый диапазон целых чисел, начиная с 0 до значений. Чтобы прочитать из этой «карты» значение, связанное с «ключом» 5, просто позвоните list.get(5). Чтобы «добавить» элемент в конце, вы просто звоните list.add(x) вместо map.put(???, x).

Таким образом, ответ так же тривиален, как: Замените Map<Integer, String> на List<String>, замените (a)->new HashMap<>() с a->new ArrayList<>() и замените .put(/*my problem*/, на .add(.

Если вы должны сделать это с картами, вы не сможете сделать это с помощью хэш-карт, если не попытаетесь использовать map.size () в качестве fr agile standin, что я настоятельно советую вам не делать (поскольку это подразумевает, что ваша карта работает только в тех случаях, когда список будет лучше, что доказывает, что решение карты хуже) - хеш-карты не имеют порядка и, следовательно, нет Идея «что является последним / самым высоким ключом». Вместо этого вы можете использовать TreeMap, который имеет такие понятия. Вы можете спросить его о самом высоком ключе, а затем использовать 1 выше этого значения.

Но я почти уверен, что вы просто хотите получить список здесь.

...