![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 3 Всего: 15 |
Я понимаю, что LinkedHashMap на то и хэш, чтобы обращаться к элементам по ключам, но у меня есть дополнительная задача, когда важно как можно быстрее присвоить пару ключ-значение, например на место второй пары записать другую пару ключ-значение.
Мой грубый подоход базируется на полном поэлементном копировании всего хэша, и вставке пары в нудный момент. Понятное дело это медленный подход, а как или чем взамен LinkedHashMap вы бы могли мне посоветовать пользоваться, главное - это гарантировать, что последовательность элементов в хэше сохраняется ровно такой же какой она сформировалась вначале, когда элементы туда добавлялись. -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
Royan, постановку задачи не понял. тебе нужно максимально быстро заменить уже существующий в Маp объект? ну т.е. ключ тот же но новое значение? или тебе нужно максимально быстро добавлять новый элемент?
|
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 3 Всего: 15 |
Максимально быстро менять пару (и ключ и значение), по заданному индексу.
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
Мне кажется, тогда тебе вообще не Map надо. свою пару ключ-значение опиши каким-нить объектом, и храни такие обекты в LinkedList.
|
|||
|
||||
ShamanTrirukiy |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 12.4.2006 Где: Харьков Репутация: 3 Всего: 5 |
Стоит ли для хранения пар делать обертку? Насколько критичен доступ по ключу? В случае с предложенным способом, так как доступ к парам нужен прямой то использовать надо ArrayList а не LinkedList (последователльный доступ) Использовать можно только хэш? Это сообщение отредактировал(а) ShamanTrirukiy - 25.4.2006, 17:55 |
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
А как ты в ArrayList замениш один объект на другой с сохранением индекса? метод ArrayList.set(int index, Object element) познакомит тебя с UnsupportedOperationException ![]() ![]() |
|||
|
||||
ShamanTrirukiy |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 12.4.2006 Где: Харьков Репутация: 3 Всего: 5 |
консоль: [1, 2, 3] [4, 2, 3] Никакого Или я что-то не так делаю? Хотя, по поводу недопустимости LinkedList-а я загнался. Сори Это сообщение отредактировал(а) ShamanTrirukiy - 25.4.2006, 18:53 |
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
Ха люботный случай.
![]() Но в любом случае именно эта операция в LinkedList должна работать быстрее. |
|||
|
||||
Ortega |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 5.11.2005 Где: Харьков, Украина Репутация: 4 Всего: 6 |
Стоп-стоп-стоп. С каких это пор доступ по индексу в связном списке (в котором доступ по определению ПОСЛЕДОВАТЕЛЬНЫЙ) работает быстрее, чем он же, но в списке с ПРЯМЫМ доступом?? --------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок |
|||
|
||||
ShamanTrirukiy |
|
||||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 12.4.2006 Где: Харьков Репутация: 3 Всего: 5 |
Подумал на досуге - если пары представлены разными объектами, то действительно стоит, а если одинаковыми - можно попробовать обойтись и массивом.
Таки не загнался! ALKS, на больших объемах данных LinkedList убъёт приложение, а вот ArrayList даст ту самую возможность
Посмотри исходники, и ты увидишь, что set(int index, Object element) в ArrayList сводится к замене элемента в массиве по заданному индексу
в то время как в LinkedList идет перебор, хоть и оптимизмрованный, всех элементов до заданного
ArrayList изначально писался для обеспечения прямого доступа(по индексу), в то время как LinkedList заточен под последовательный доступ, и доступ к элементам в нем упирается в поэлементный обход коллекции. Это сообщение отредактировал(а) ShamanTrirukiy - 26.4.2006, 10:38 |
||||||||||||
|
|||||||||||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
Внимательно перечетал доку. да LinkedList гомно... я-то наивно полагал что там нечто большее чем тупой сканиннг. могли бы B-дерево организовать что-ли...
А вообще, если нужна действительно скорость - простые массивы. Это сообщение отредактировал(а) ALKS - 26.4.2006, 11:20 |
|||
|
||||
ShamanTrirukiy |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 12.4.2006 Где: Харьков Репутация: 3 Всего: 5 |
||||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
вот тут ты ошибаешся и сильно. как раз недавно читал статью. мужик пишет математические алгоритмы. двух и трехмерная упаковка объектов (есть такая область раскрой и упаковка). объектов сотни-тысяч/милионы так вот скорость работы с простыми масивами разительно выше, да и памяти жрет меньше ![]() у меня в практике был случай - фуззи-поиск по ~300000 коротких строк. коллекции пошли лесом почти сразу и чуть позже пошел лесом String ![]() вывод такой. если можете изначаьно оченить размер массива и если предполагаете что размр будет большой - ну скажем десятки тысяч элементов и выше - простые массивы. ![]() |
|||
|
||||
ShamanTrirukiy |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 12.4.2006 Где: Харьков Репутация: 3 Всего: 5 |
ALKS, не могу не согласиться.
На статью линки нет? Это сообщение отредактировал(а) ShamanTrirukiy - 26.4.2006, 12:17 |
|||
|
||||
Ortega |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 5.11.2005 Где: Харьков, Украина Репутация: 4 Всего: 6 |
зря ты так на него... Он хорош, когда с массивом чато производятся операции вставки/удаления --------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |