HashMap по сравнению с работой ArrayList, я исправляю

Бизнес-логика должна быть помещена в приложение/средний уровень как предпочтительный вариант. Тем путем это может быть выражено в форме модели предметной области, помещено в управлении исходным кодом, быть разделенным или объединенным со связанным (пересмотренным) кодом, и т.д. Это также дает Вам некоторую независимость поставщика базы данных.

Объектно-ориентированные языки также намного более выразительны, чем хранимые процедуры, позволяя Вам лучше и более легко описывают в коде, что должно происходить.

единственные серьезные основания поместить код в хранимые процедуры: если выполнение так производит значительный и необходимый выигрыш в производительности или если тот же бизнес-код должен быть выполнен несколькими платформами (Java, C#, PHP). Даже когда с помощью нескольких платформ, существуют альтернативы, такие как веб-сервисы, которые могли бы лучше подходить для совместного использования функциональности.

35
задан ire_and_curses 5 October 2009 в 03:29
поделиться

6 ответов

В общем, да, вы правы. Также существует комбинированная структура данных, LinkedHashMap , которая предлагает быстрый доступ к произвольным элементам, а также предсказуемый порядок.

Однако стоит отметить, что ArrayList и HashMap - это всего лишь две реализации List и Map интерфейсы соответственно. Существуют другие реализации каждого из них, которые могут быть более подходящими для более конкретных требований. Например,

34
ответ дан 27 November 2019 в 06:33
поделиться

Карта - это карта или «ассоциативный массив» . Он имеет раскладку ключ-> значение. С другой стороны, List - это список , который представляет собой упорядоченный набор элементов.

Более прямое сравнение, возможно, будет между Set и List: оба эти значения содержат, где список явно упорядочен (вы можете получить элемент # x), а набор (обычно) не упорядочен (ну, если это не SortedSet , и в этом случае порядок итераций будет упорядочен компаратором

Две наиболее распространенные реализации для Set и List - это HashSet и ArrayList . Чтобы проверить, принадлежит ли элемент к arrayylist (содержит (element)), реализация перебирает все его элементы, проверяя, был ли найден элемент, используя метод equals (). Чтобы проверить, принадлежит ли элемент к хеш-набору, сначала вычисляется hashCode () элемента, затем идет «прямо» в позицию, где этот элемент должен находиться, и проверяется, есть ли он там.

Таким образом, существенная разница между ArrayList и HashSet - это скорость contains () .

В списке вы можете запросить элемент # x в дополнение к тому, что вы можете сделать с набором, который это добавить, удалить, спросить, присутствует ли (содержит) и перебрать все элементы.

На карте вы можете запрашивать элемент по его ключу, а не по его индексу, как вы это делаете со списком.

HashSet в настоящее время реализуется просто с помощью HashMap, где часть значения отношения ключ-> значение не используется. Это совершенно абсурдно и не имеет никакого смысла, кроме как тратить по крайней мере 4 байта, можно спорить с 12, для всех без исключения элементов, вставленных в HashSet.

48
ответ дан 27 November 2019 в 06:33
поделиться

Я бы сказал, что вы в целом правы, но не совсем точны. Вы используете HashMap для получения данных, но не всегда случайным образом. Вы используете ArrayList для итерации, но вы также можете использовать его для поиска через индекс.

В более общем плане вы используете реализацию Map , когда вам нужно эффективно извлекать элементы путем поиска , т.е. получение чего-либо на основе ключа - например, словарей, кешей, репозиториев и т. д.

Вы используете реализацию List , когда вам просто нужна структура данных, в которой вы можете выполнять итерацию по вашим данным, обычно когда вы хотите, чтобы они располагались в заранее определенном и / или предсказуемом порядке.

Другими словами, вы используете Map в качестве структуры данных индексации, и вы используете List , как обычно использовать массивы.

10
ответ дан 27 November 2019 в 06:33
поделиться

Для меня важнее то, забочусь ли я об упорядочивании предметов в коллекции. Если вам важен порядок, используйте ArrayList. Если вас не волнует порядок (вы просто хотите сохранить кучу предметов), вы можете использовать HashMap.

4
ответ дан 27 November 2019 в 06:33
поделиться

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

Другой усложняющий фактор связан с вставками и порядком, как указал Дэн.

2
ответ дан 27 November 2019 в 06:33
поделиться

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

5
ответ дан 27 November 2019 в 06:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: