Как вы объявляете TreeMap - SortedMap или Map? - PullRequest
2 голосов
/ 19 мая 2011

Я написал некоторый код, который работает нормально, но я не совсем понимаю, как правильно объявить TreeMap.

Если SortedMap является подынтерфейсом Map, то можно ли просто использовать Map, если код работаетХорошо?Является ли SortedMap даже необходимым, если TreeMap отлично работает с картой?

Должно ли это быть:

private Map<String, List <Bus>> map = new TreeMap<String, List <Bus>>();

или

private SortedMap<String, List <Bus>> map = new TreeMap<String, List <Bus>>();

Спасибо.Извините, это так просто - я новичок в Java.

Ответы [ 6 ]

5 голосов
/ 19 мая 2011

Я использовал SortedMap, чтобы сообщить другим, что он уже отсортирован.Использование Map тоже нормально.

1 голос
/ 19 мая 2011

Ответ на ваш вопрос зависит от вашего использования.По умолчанию вы должны просто запрограммировать интерфейс типа данных (например, Map).Если SortedMap предоставляет методы, которые вы будете использовать и которые не объявлены в Map, то запрограммируйте SortedMap.

1 голос
/ 19 мая 2011
private Map<String, List <Bus>> busTimetable = new TreeMap<String, List <Bus>>();

Если у вас нет веских причин, всегда используйте интерфейс самого высокого уровня, какой только можете.

0 голосов
/ 13 февраля 2013

Это зависит от ваших требований и дизайна, когда это возможно, используйте самый высокий уровень абстракции, который является картой.Причина в том, что вы создаете сервис, который использует список данных и выводит на карту.некоторый клиент может ожидать отсортированный порядок данных в карте, а другой клиент может просто нуждаться в данных в порядке вставки карты, если вы используете определенный интерфейс SortedMap;С этим сценарием вы не можете справиться, используя один сервис, и в итоге вы создадите два разных API, потому что тот, кто ожидает отсортированный порядок, вы можете просто вернуть реализацию TreeMap, а один для порядка вставки, который вы можете использовать LinkedHashMap.Итак, насколько гибка ваша программа.

0 голосов
/ 19 мая 2011

Я согласен с другими комментаторами, что вы используете SortedMap, если вы используете методы, которых нет в vanilla Map.Также используйте SortedMap, если вы используете в итераторе или в цикле for-each, если они неявно полагаются на отсортированный ввод.о, если вам нужна только ваниль Map, то HashMap может быть лучшим выбором.HashMap имеет O (1) доступ;TreeMap нет.

0 голосов
/ 19 мая 2011

Если вам нужно использовать определенные SortedMap методы (например, firstKey() / lastKey() / что угодно ...), обязательно объявите вашу ссылку как SortedMap.В противном случае я выберу Map, если я планирую использовать его только как Map, поэтому я смогу переключать реализации без каких-либо других изменений в коде.

...