2011-05-18 3 views
2

Я написал код, который отлично работает, но я смущен правильным способом объявить TreeMap.Как вы объявляете TreeMap - SortedMap или Map?

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

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

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

или

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

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

ответ

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

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

5

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

+4

+1 Лучше всего выявить характеристики коллекции без конкретного класса, который ее реализует. – karmakaze

0

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

1

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

0

Я согласен с другими комментаторами, что вы используете SortedMap, если используете методы, которые не используются в ванили Map. Также используйте SortedMap, если вы используете в итераторе или для каждого цикла, если они неявно полагаются на отсортированный вход.

Если ни один из этих случаев не является истинным, вы должны также подумать, если вам нужен только ваниль Map, может быть лучшим выбором HashMap. HashMap имеет доступ O (1); TreeMap нет.

0

Это зависит от вашего требования и дизайна, когда это возможно, используя высочайший уровень абстракции, который является Картой. Причина в том, что вы создаете службу, и она потребляет список данных и выводит результат на карте. Некоторые клиенты могут рассчитывать на упорядоченный порядок данных на карте, а некоторым другим клиентам могут потребоваться только данные в порядке вставки карты, если вы используете определенный интерфейс SortedMap; такой сценарий, с которым вы не можете справиться, используя одну услугу, и в итоге вы создадите два разных api becuase: тот, кто ожидает отсортированный заказ, вы можете просто вернуть реализацию TreeMap, а другой для заказа на размещение, вы можете использовать LinkedHashMap. Так что о гибкости вашей программы.

Смежные вопросы