Как создать 2D карту в Java? - PullRequest
1 голос
/ 23 марта 2010

Я хотел бы иметь отображение, которое отображает две строки в одну строку. Например: map["MainServer","Status"] вернуть «активный». Каков наилучший способ сделать это на Java. Должен ли я использовать HashMap, который включает другой HashMap в качестве своих элементов?

Ответы [ 4 ]

3 голосов
/ 23 марта 2010

Наличие карты на карте означает, что вы делаете двойной поиск (семантически и с точки зрения стоимости). Это то, что вы на самом деле хотите?

Возможно, вам лучше определить класс MapKeyPair, который содержит строки X, и переопределить их для равных и hashCode.

В более общем смысле, если пара имеет фактическое значение или абстракцию, представьте ее через объект с соответствующим именем.

1 голос
/ 23 марта 2010

Мне кажется, что единственной важной информацией является значение в конце.

В этом случае самое простое решение - объединить строки в одну строку ключа. карта [ "MainServerStatus"]

Если вы хотите иметь все значения для «MainServer», вы можете перебрать все элементы и отфильтровать те, которые начинаются со строки «MainServer».

Это очень простое и простое решение, но когда вы не хотите знать все элементы MainServer, вы можете использовать его. Иначе это может замедлить ваше приложение

1 голос
/ 23 марта 2010

Звучит так, как будто вы отправляете сообщения объекту сервера для получения возвращаемых значений.

Почему бы не создать класс Server с именем и состоянием (и всеми другими вторичными свойствами), установить его и сопоставить имя сервера с сервером?

Затем вы делаете что-то вроде этого.

Server server = map.get(serverName);
return server.getStatus();
0 голосов
/ 23 марта 2010

Если общее количество пар невелико, переходите к простому: карта от первого ключа до второй карты; вторая карта переходит от второго ключа к значению.

Если общее количество пар велико, производительность может иметь значение. Если это так, я бы предложил то же решение, что и выше, но в качестве первого ключа выберите тот, который имеет наименьший ожидаемый диапазон (например, если первый ключ - одно из тысяч имен, а второй - один из десяти предварительно определенных состояний , пусть второй ключ будет первым, который вы ищите).

Если производительность не имеет значения, переходите к прозрачности дизайна: используйте класс Pair в качестве ключа на одной карте. (Класс Pair достаточно полезен, так что к настоящему моменту у вас, вероятно, уже должен быть хорошо написанный.)

...