powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
25 сообщений из 59, страница 1 из 3
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240664
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например есть большая (тысячи или даже милионы обьектов) колекция, например книг. Использование каждый раз стандартного for -- очень долго. Как это сделать с помощью более специфичесих колекций- например Sеt, Mаp, и их модификаций Sortеd Mаp? Если использовать отображения то я вижу вариант создания нескольких производных карт. Например автор-название, автор-год издания. И при поиске по ключу вывод самого ключа, и значений. И если автор введен не полностью - то уже поиск из возможных вариантов. Правильный ли это подход?
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240680
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240691
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет это первый вопрос был по субд у меня касательно такого поиска, второй - меня спрашивали о колекциях, в частности о необходимости карт отображений. Индекс, ID очевидно необходим и здесь чтобы привязать например автора к ID в виде отображения, а ID соответственно к автору, названию и т.д. Но поиск то надо по автору/названию вести -- и здесь мне непонятно роль отсортированых карт - каким образом идет ускорение поиска - за счет чего достигается например обьект отображения пушкин-35000(id)/или название книги? Если это встроеный механизм sorted map то настолько быстро это действует?
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240704
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если речь про бинарный поиск то ускорение происходит элементарно.

по отсортированному списку скажем абвгдежзийклмно ты ищешь букву Л - окей, гугл. тыкаем в центр списка и видим: буква Ж. буква Ж меньше буквы Л значит тыкаем в половину второй половины списка, а это буква К. О буква К меньше буквы Л. значит дальше бьем в эту половину половины а это буква М. м больше Л. значит идем назад и опа.. там буква Л. всё. нашли. а теперь пмсчитай количество итераций и сравни с тупой переборкой сначала (или с конца), которая по факту занимает О(н) времени. т.е. линейная. в нашем поиске вышло 4 итерации, а если бы ты крутил от начала - то было бы 12. почувствуйте разницу. мне кажется, у тебя если это был собес, то скорее всего от тебя именно и ждали ответа - бинарный поиск. который применим только к сортированным данным.

надеюсь, я понятно объяснил как он работает ))
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240732
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну принцип сортировки понятен, но как именно эти отображения использовать - это был главный вопрос (мое предположение имеет смысл?). И касательно отсортированого списка (ключей)? Если идти подряд от 1 элемента к 30500 то это тоже будет достаточно долго. У меня было предположение что в отсортированом списке есть какой то маркер к которому можно обратится и определить что автор на букву П (в даном случае) начинается с 28000 позиции списка, но это наверное неправильно. Если бинарный поиск быстрее в 3 раза -- то это ощутимо, но если мне было сказано что простой перебор очень долго то такой бинарный поиск обеспечит минимум долгий поиск. Если возможно mаp.gеt (n/2) то это обьясняет как найди середину списка, но все это упрощенная версия если взять во внимание что автора/ названия вводим целиком, или хотя бы вводим начало автора или названия.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240746
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrt,
похоже это вопросы с собеседования....
если такое задаётся - то это не то место где надо стараться закрепиться.
это задача чисто для субд.
если это проверка работать с коллекциям - то вопрос надо ставить иначе.
что так же говорит о проблемности с постановкой задач.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240748
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не знаю что от тебя конкретно хотели и какие были доп.условия. но если у тебя есть коллекция и тебе в коллекции надо что-то найти, и коллекшн отсортированный - то искать надо бинарным поиском как мне кажется. и да, он не в 3 раза быстрее, а в n/log(n) раз :) либо вариант хашмапы - там выемка по ключу вообще константная величина.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240751
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrtНу принцип сортировки понятен, но как именно эти отображения использовать - это был главный вопрос (мое предположение имеет смысл?). И касательно отсортированого списка (ключей)? Если идти подряд от 1 элемента к 30500 то это тоже будет достаточно долго. У меня было предположение что в отсортированом списке есть какой то маркер к которому можно обратится и определить что автор на букву П (в даном случае) начинается с 28000 позиции списка, но это наверное неправильно. Если бинарный поиск быстрее в 3 раза -- то это ощутимо, но если мне было сказано что простой перебор очень долго то такой бинарный поиск обеспечит минимум долгий поиск. Если возможно mаp.gеt (n/2) то это обьясняет как найди середину списка, но все это упрощенная версия если взять во внимание что автора/ названия вводим целиком, или хотя бы вводим начало автора или названия.
кстати по мапам - далеко не все хранят порядок , т.е. там нет понятия "середина". порядок только (что мне в голову прилетает) у линкедхашмап и тримап т.к. она вообще сортированная. и если у тебя ключ пушкин а буквы только пушк то как вариант - вытащить вначале ключи в коллекцию, а там по ней уже бинаркой пройтись. найти ключ и из ключа выдрать значение на скорости О(1).
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240754
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяarrt,
похоже это вопросы с собеседования....
если такое задаётся - то это не то место где надо стараться закрепиться.
это задача чисто для субд.
если это проверка работать с коллекциям - то вопрос надо ставить иначе.
что так же говорит о проблемности с постановкой задач.
Я тоже как то приводил пример "а как сделать то то и то то в коллекции на 20.000.000 записей". и на ответ если у тебя появилась такая задача - то ты явно что-то не так делаешь, на меня напали с криками "и такое бывает"
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240756
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас создал хашмап из 2х миллионов карт, стринг стринг. скорость вытаскивания по ключу - 0 (что и следовало из О(1) собссно). скорость добавления 700миллисекунд. долго да? )) а у тебя задача 30500 ???
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240761
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вопрос касается субд и колекций значит его можно реализовать и через колекции. Вопрос как? Ну если мое предположение неправильно то как можно иначе? Моя идея такая: списку книг с полями автор, название, год выпуска назначается и четвертое поле id. Потом на основание этой колекции: делается три карты отображение Sortedmap -- автор-id, название-id.. Если соответствие нашло выводим свойства обьекта через list.gеt(id).author и т.д.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240762
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrtЕсли вопрос касается субд и колекций значит его можно реализовать и через колекции. Вопрос как? Ну если мое предположение неправильно то как можно иначе? Моя идея такая: списку книг с полями автор, название, год выпуска назначается и четвертое поле id. Потом на основание этой колекции: делается три карты отображение Sortedmap -- автор-id, название-id.. Если соответствие нашло выводим свойства обьекта через list.gеt(id).author и т.д.
30500 записей в листе - это ничто. мне кажется, там вообще соображать смысла особо нет. хочешь - переборкой тупой найди ) если в контексте дб - то выдрать два поля автор-название. и по ним гулять. Ну реально, это ниачом. Сотые доли секунды.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240805
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой подход имеет право на жизнь? 30500 - это просто я для примера привел - вопрос мне задавали на случай сотни тысяч или даже милионов. И не верю что вопрос был просто так что бы ввести в заблуждение и сказать "я не знаю". Иной вопрос был типичный из джава интервью квесшнс.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240841
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 миллиона записей за 0.7 сек добавление и выборка за даже меньшее время - это медленно или как? это в десять раз больше, чем 200 тысяч. а "миллионы" записей боюсь, аутофмемори ты словишь быстрее, чем у тебя в проц упрется. :)

мне интересно, а что будет если его спросить "а вы сами то пробовали делать выборку в коллекции на 30500 записей или так на хабре вопросов надрали?".

твой подход копирует (судя по тому что я понял) такую штуку, которая называется "ассоциативный массив", который изобрели еще в 1956м году и который в яве называется хэшмап :) понимаешь, суть в том, что они тебя заставляют придумывать велосипед. который мало того что есть, так он еще и не нужен.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240845
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спросили, а вопрос для меня остался. Хешмап или сортедмап - но одним таким отображением не обойдешся. А вот если взять их по количеству полей обьекта - может подойти. Сперва предполагал что это тривиальный вопрос, вопрос из практики. Если таким способом можно хоть в рады ускорить поиск после построения трех карт отображений - наверное это подходящий вариант. Но соответствует ли мой подход то что меня спрашивали не знаю, ибо сперва предполагал что скорость поиска будет так в 10 раз выше.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240862
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
раз в 10 выше чем что? вытаскивать по ключу - мгновенно (ну почти) независимо от размера карты. по факту искать (как я понял) тебе надо по автору по маске. ОУКЕЙ. итерируй сет ключей (если автор = ключ). 35000 ключей стринговых - это ничто. нашел ключ - дергаешь по ключу произведения.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39240893
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrt, эта тема (ее теоретическая) часть давно изучена в оптимизации SQL запросов.

В ответ на DML оператор

Код: sql
1.
delete from books where ......



SQL-оптимизатор строит план исполнения запроса который базируется форме предиката
WHERE и на статистических показателях самих данных.

Твой вопрос in general, вобщем не имеет правильного решения до тех пор пока не будем
знать все условия.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39241606
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде задание простое. Альтернатива использованию бд. Надо намного быстрее, в общем случае, найти какой то атрибут обьекта колекции с помощью map не используя стандартный цыкл for. Какие еще дополнительные условия надо?
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39241613
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrtВроде задание простое.
Смотря для кого.

arrtАльтернатива использованию бд.
БД сейчас на много большее понятие чем RDBMS.

arrtНадо намного быстрее
Быстрее чем проиндексированная in-memory database у тебя вряд ли получится.

arrt, в общем случае, найти какой то атрибут обьекта колекции с помощью map не используя стандартный цыкл for.

Почему с помощью map? Под циклом for понимается ключевое слово в Java или итеративный процесс вообще?

arrtКакие еще дополнительные условия надо?
Вы ставите задачу и спрашиваете какие "надо условия"? Условия чего? Задачи?

Я знаю только два решения.
1) Построение индекса. Это такая коллекция, которая на много меньше нашей основной коллекции и хранит частичную информацию о том где что-то искать в нашей коллекции. Индексы бывают разными. HashMap и любое дерево можно использовать как пример индекса.
2) Многопоточный и многопроцессорный поиск aka Map\Reduce. Суть в том что коллекция разделяется на части и каждую часть прочесывает отдельный процесс. Сейчас поднять комп в облаке стоит копейки, поэтому для единоразовых акций это отличное решение. Правда, это в некотором роде вышеупомянутый for.

Эти двое, обычно, комбинируются. Так как производительность с индексом увеличивается очень сильно. А MapReduce позволяет выжать из железа максимум.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39241672
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrtВроде задание простое. Альтернатива использованию бд. Надо намного быстрее, в общем случае, найти какой то атрибут обьекта колекции с помощью map не используя стандартный цыкл for. Какие еще дополнительные условия надо?
Быстрее всего - использовать различные ленивые оптимизации. Например вместо удаления
книг из коллекций - создать новую коллекцию и перенести туда те которые надо оставить.
Это в том случае когда мы чистим 99% всего.

Чудно ? Правда? Но работает.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39241775
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrtНапример есть большая (тысячи или даже милионы обьектов) колекция, например книг. Использование каждый раз стандартного for -- очень долго. Как это сделать с помощью более специфичесих колекций- например Sеt, Mаp, и их модификаций Sortеd Mаp? Если использовать отображения то я вижу вариант создания нескольких производных карт. Например автор-название, автор-год издания. И при поиске по ключу вывод самого ключа, и значений. И если автор введен не полностью - то уже поиск из возможных вариантов. Правильный ли это подход?


а Stream из Java 8 смотрели ?
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39241777
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242028
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrtВроде задание простое. Альтернатива использованию бд. Надо намного быстрее, в общем случае, найти какой то атрибут обьекта колекции с помощью map не используя стандартный цыкл for. Какие еще дополнительные условия надо?
У тебя есть тестовый набор данных? Хотя-бы строк несколько тыщ? Книга-название-автор-год издания e.t.c.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242330
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz2) Многопоточный и многопроцессорный поиск aka Map\Reduce. Суть в том что коллекция разделяется на части и каждую часть прочесывает отдельный процесс. Сейчас поднять комп в облаке стоит копейки, поэтому для единоразовых акций это отличное решение. Правда, это в некотором роде вышеупомянутый for.

С каких пор Map/Reduce стал алгоритмом поиска? Скорее это агрегация данных.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242344
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettС каких пор Map/Reduce стал алгоритмом поиска? Скорее это агрегация данных.
Во-первых, слово "алгоритм", вроде, до вас тут никто не упоминал.
Во-вторых Map/Reduce это способ распределения задач для обработки большого набора данных. Решать этим способом можно разные задачи, а не только считать агрегаты.
В-третих, обратимся, например, к википедии.
https://en.wikipedia.org/wiki/MapReduce MapReduce is useful in a wide range of applications, including distributed pattern-based searching , distributed sorting, web link-graph reversal, Singular Value Decomposition,[16] web access log stats, inverted index construction, document clustering, machine learning,[17] and statistical machine translation.
...
Рейтинг: 0 / 0
25 сообщений из 59, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]