Беженец из C# просит помощи в создании коллекций Java

StackOverflow https://stackoverflow.com/questions/1029231

Вопрос

Мне нужно сохранить информацию о ключе/значении в коллекции определенного типа.В C# я бы определил словарь следующим образом:

var entries = new Dictionary<string, int>();
entries.Add("Stop me", 11);
entries.Add("Feed me", 12);
entries.Add("Walk me", 13);

Тогда я бы получил доступ к значениям так:

int value = entries["Stop me"];

Как мне это сделать на Java?Я видел примеры с ArrayList, но мне бы хотелось получить решение с использованием дженериков, если это возможно.

Это было полезно?

Решение

Вы хотите использовать Map

Map<String, Integer> m = new HashMap<String, Integer>();
m.put("Stop me", 11);
Integer i = m.get("Stop me"); // i == 11

Обратите внимание, что в последней строке я мог бы сказать:

int i = m.get("Stop me");

Что является сокращением для (с автоматической распаковкой Java):

int i = m.get("Stop me").intValue()

Если на карте нет указанного значения для данного ключа, get возвращает null и это выражение выдает NullPointerException. Следовательно, в этом случае всегда рекомендуется использовать коробочный тип Integer

Другие советы

Использовать java.util.Map.Существует несколько реализаций:

  • HashMap:Поиск O (1), не поддерживает порядок ключей
  • TreeMap:Поиск O(log n) поддерживает порядок ключей, поэтому вы можете перебирать их в гарантированном порядке.
  • LinkedHashMap:Поиск O(1) перебирает ключи в том порядке, в котором они были добавлены на карту.

Вы используете их как:

Map<String,Integer> map = new HashMap<String,Integer>();
map.put("Stop me", 11);
map.put("Feed me", 12);

int value = map.get("Stop me");

Для дополнительного удобства работы с коллекциями взгляните на Библиотека коллекций Google.Это превосходно.

Вы используете Map на Java.

Обратите внимание, что вы не можете использовать int (или любой другой тип примитива) в качестве параметра универсального типа, но из-за автобокса он по-прежнему ведет себя почти , как если бы он был Map<String, int> вместо Map<String, Integer>. (Вы не хотите делать много автобоксов в чувствительном к производительности коде.)

Map<String, Integer> entries = new HashMap<String, Integer>();
entries.put("Stop me", 11);
entries.put("Feed me", 12);
entries.put("Walk me", 13);
int value = entries.get("Stop me"); // if you know it exists
// If you're not sure whether the map contains a value, it's better to do:
Integer boxedValue = entries.get("Punch me");
if (boxedValue != null) {
    int unboxedValue = boxedValue;
    ...
}
scroll top