|
|
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Например есть большая (тысячи или даже милионы обьектов) колекция, например книг. Использование каждый раз стандартного for -- очень долго. Как это сделать с помощью более специфичесих колекций- например Sеt, Mаp, и их модификаций Sortеd Mаp? Если использовать отображения то я вижу вариант создания нескольких производных карт. Например автор-название, автор-год издания. И при поиске по ключу вывод самого ключа, и значений. И если автор введен не полностью - то уже поиск из возможных вариантов. Правильный ли это подход? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2016, 13:52 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2016, 15:06 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Нет это первый вопрос был по субд у меня касательно такого поиска, второй - меня спрашивали о колекциях, в частности о необходимости карт отображений. Индекс, ID очевидно необходим и здесь чтобы привязать например автора к ID в виде отображения, а ID соответственно к автору, названию и т.д. Но поиск то надо по автору/названию вести -- и здесь мне непонятно роль отсортированых карт - каким образом идет ускорение поиска - за счет чего достигается например обьект отображения пушкин-35000(id)/или название книги? Если это встроеный механизм sorted map то настолько быстро это действует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2016, 16:08 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
если речь про бинарный поиск то ускорение происходит элементарно. по отсортированному списку скажем абвгдежзийклмно ты ищешь букву Л - окей, гугл. тыкаем в центр списка и видим: буква Ж. буква Ж меньше буквы Л значит тыкаем в половину второй половины списка, а это буква К. О буква К меньше буквы Л. значит дальше бьем в эту половину половины а это буква М. м больше Л. значит идем назад и опа.. там буква Л. всё. нашли. а теперь пмсчитай количество итераций и сравни с тупой переборкой сначала (или с конца), которая по факту занимает О(н) времени. т.е. линейная. в нашем поиске вышло 4 итерации, а если бы ты крутил от начала - то было бы 12. почувствуйте разницу. мне кажется, у тебя если это был собес, то скорее всего от тебя именно и ждали ответа - бинарный поиск. который применим только к сортированным данным. надеюсь, я понятно объяснил как он работает )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2016, 16:54 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Ну принцип сортировки понятен, но как именно эти отображения использовать - это был главный вопрос (мое предположение имеет смысл?). И касательно отсортированого списка (ключей)? Если идти подряд от 1 элемента к 30500 то это тоже будет достаточно долго. У меня было предположение что в отсортированом списке есть какой то маркер к которому можно обратится и определить что автор на букву П (в даном случае) начинается с 28000 позиции списка, но это наверное неправильно. Если бинарный поиск быстрее в 3 раза -- то это ощутимо, но если мне было сказано что простой перебор очень долго то такой бинарный поиск обеспечит минимум долгий поиск. Если возможно mаp.gеt (n/2) то это обьясняет как найди середину списка, но все это упрощенная версия если взять во внимание что автора/ названия вводим целиком, или хотя бы вводим начало автора или названия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2016, 18:36 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
arrt, похоже это вопросы с собеседования.... если такое задаётся - то это не то место где надо стараться закрепиться. это задача чисто для субд. если это проверка работать с коллекциям - то вопрос надо ставить иначе. что так же говорит о проблемности с постановкой задач. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2016, 19:30 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
я не знаю что от тебя конкретно хотели и какие были доп.условия. но если у тебя есть коллекция и тебе в коллекции надо что-то найти, и коллекшн отсортированный - то искать надо бинарным поиском как мне кажется. и да, он не в 3 раза быстрее, а в n/log(n) раз :) либо вариант хашмапы - там выемка по ключу вообще константная величина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2016, 19:33 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
arrtНу принцип сортировки понятен, но как именно эти отображения использовать - это был главный вопрос (мое предположение имеет смысл?). И касательно отсортированого списка (ключей)? Если идти подряд от 1 элемента к 30500 то это тоже будет достаточно долго. У меня было предположение что в отсортированом списке есть какой то маркер к которому можно обратится и определить что автор на букву П (в даном случае) начинается с 28000 позиции списка, но это наверное неправильно. Если бинарный поиск быстрее в 3 раза -- то это ощутимо, но если мне было сказано что простой перебор очень долго то такой бинарный поиск обеспечит минимум долгий поиск. Если возможно mаp.gеt (n/2) то это обьясняет как найди середину списка, но все это упрощенная версия если взять во внимание что автора/ названия вводим целиком, или хотя бы вводим начало автора или названия. кстати по мапам - далеко не все хранят порядок , т.е. там нет понятия "середина". порядок только (что мне в голову прилетает) у линкедхашмап и тримап т.к. она вообще сортированная. и если у тебя ключ пушкин а буквы только пушк то как вариант - вытащить вначале ключи в коллекцию, а там по ней уже бинаркой пройтись. найти ключ и из ключа выдрать значение на скорости О(1). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2016, 19:42 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
вадяarrt, похоже это вопросы с собеседования.... если такое задаётся - то это не то место где надо стараться закрепиться. это задача чисто для субд. если это проверка работать с коллекциям - то вопрос надо ставить иначе. что так же говорит о проблемности с постановкой задач. Я тоже как то приводил пример "а как сделать то то и то то в коллекции на 20.000.000 записей". и на ответ если у тебя появилась такая задача - то ты явно что-то не так делаешь, на меня напали с криками "и такое бывает" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2016, 19:51 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Сейчас создал хашмап из 2х миллионов карт, стринг стринг. скорость вытаскивания по ключу - 0 (что и следовало из О(1) собссно). скорость добавления 700миллисекунд. долго да? )) а у тебя задача 30500 ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2016, 20:15 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Если вопрос касается субд и колекций значит его можно реализовать и через колекции. Вопрос как? Ну если мое предположение неправильно то как можно иначе? Моя идея такая: списку книг с полями автор, название, год выпуска назначается и четвертое поле id. Потом на основание этой колекции: делается три карты отображение Sortedmap -- автор-id, название-id.. Если соответствие нашло выводим свойства обьекта через list.gеt(id).author и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2016, 20:33 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
arrtЕсли вопрос касается субд и колекций значит его можно реализовать и через колекции. Вопрос как? Ну если мое предположение неправильно то как можно иначе? Моя идея такая: списку книг с полями автор, название, год выпуска назначается и четвертое поле id. Потом на основание этой колекции: делается три карты отображение Sortedmap -- автор-id, название-id.. Если соответствие нашло выводим свойства обьекта через list.gеt(id).author и т.д. 30500 записей в листе - это ничто. мне кажется, там вообще соображать смысла особо нет. хочешь - переборкой тупой найди ) если в контексте дб - то выдрать два поля автор-название. и по ним гулять. Ну реально, это ниачом. Сотые доли секунды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2016, 20:36 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Мой подход имеет право на жизнь? 30500 - это просто я для примера привел - вопрос мне задавали на случай сотни тысяч или даже милионов. И не верю что вопрос был просто так что бы ввести в заблуждение и сказать "я не знаю". Иной вопрос был типичный из джава интервью квесшнс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2016, 00:15 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
2 миллиона записей за 0.7 сек добавление и выборка за даже меньшее время - это медленно или как? это в десять раз больше, чем 200 тысяч. а "миллионы" записей боюсь, аутофмемори ты словишь быстрее, чем у тебя в проц упрется. :) мне интересно, а что будет если его спросить "а вы сами то пробовали делать выборку в коллекции на 30500 записей или так на хабре вопросов надрали?". твой подход копирует (судя по тому что я понял) такую штуку, которая называется "ассоциативный массив", который изобрели еще в 1956м году и который в яве называется хэшмап :) понимаешь, суть в том, что они тебя заставляют придумывать велосипед. который мало того что есть, так он еще и не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2016, 09:00 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Спросили, а вопрос для меня остался. Хешмап или сортедмап - но одним таким отображением не обойдешся. А вот если взять их по количеству полей обьекта - может подойти. Сперва предполагал что это тривиальный вопрос, вопрос из практики. Если таким способом можно хоть в рады ускорить поиск после построения трех карт отображений - наверное это подходящий вариант. Но соответствует ли мой подход то что меня спрашивали не знаю, ибо сперва предполагал что скорость поиска будет так в 10 раз выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2016, 09:41 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
раз в 10 выше чем что? вытаскивать по ключу - мгновенно (ну почти) независимо от размера карты. по факту искать (как я понял) тебе надо по автору по маске. ОУКЕЙ. итерируй сет ключей (если автор = ключ). 35000 ключей стринговых - это ничто. нашел ключ - дергаешь по ключу произведения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2016, 11:45 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
arrt, эта тема (ее теоретическая) часть давно изучена в оптимизации SQL запросов. В ответ на DML оператор Код: sql 1. SQL-оптимизатор строит план исполнения запроса который базируется форме предиката WHERE и на статистических показателях самих данных. Твой вопрос in general, вобщем не имеет правильного решения до тех пор пока не будем знать все условия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2016, 14:30 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Вроде задание простое. Альтернатива использованию бд. Надо намного быстрее, в общем случае, найти какой то атрибут обьекта колекции с помощью map не используя стандартный цыкл for. Какие еще дополнительные условия надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 18:15 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
arrtВроде задание простое. Смотря для кого. arrtАльтернатива использованию бд. БД сейчас на много большее понятие чем RDBMS. arrtНадо намного быстрее Быстрее чем проиндексированная in-memory database у тебя вряд ли получится. arrt, в общем случае, найти какой то атрибут обьекта колекции с помощью map не используя стандартный цыкл for. Почему с помощью map? Под циклом for понимается ключевое слово в Java или итеративный процесс вообще? arrtКакие еще дополнительные условия надо? Вы ставите задачу и спрашиваете какие "надо условия"? Условия чего? Задачи? Я знаю только два решения. 1) Построение индекса. Это такая коллекция, которая на много меньше нашей основной коллекции и хранит частичную информацию о том где что-то искать в нашей коллекции. Индексы бывают разными. HashMap и любое дерево можно использовать как пример индекса. 2) Многопоточный и многопроцессорный поиск aka Map\Reduce. Суть в том что коллекция разделяется на части и каждую часть прочесывает отдельный процесс. Сейчас поднять комп в облаке стоит копейки, поэтому для единоразовых акций это отличное решение. Правда, это в некотором роде вышеупомянутый for. Эти двое, обычно, комбинируются. Так как производительность с индексом увеличивается очень сильно. А MapReduce позволяет выжать из железа максимум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 18:25 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
arrtВроде задание простое. Альтернатива использованию бд. Надо намного быстрее, в общем случае, найти какой то атрибут обьекта колекции с помощью map не используя стандартный цыкл for. Какие еще дополнительные условия надо? Быстрее всего - использовать различные ленивые оптимизации. Например вместо удаления книг из коллекций - создать новую коллекцию и перенести туда те которые надо оставить. Это в том случае когда мы чистим 99% всего. Чудно ? Правда? Но работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 19:33 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
arrtНапример есть большая (тысячи или даже милионы обьектов) колекция, например книг. Использование каждый раз стандартного for -- очень долго. Как это сделать с помощью более специфичесих колекций- например Sеt, Mаp, и их модификаций Sortеd Mаp? Если использовать отображения то я вижу вариант создания нескольких производных карт. Например автор-название, автор-год издания. И при поиске по ключу вывод самого ключа, и значений. И если автор введен не полностью - то уже поиск из возможных вариантов. Правильный ли это подход? а Stream из Java 8 смотрели ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 00:23 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 00:25 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
arrtВроде задание простое. Альтернатива использованию бд. Надо намного быстрее, в общем случае, найти какой то атрибут обьекта колекции с помощью map не используя стандартный цыкл for. Какие еще дополнительные условия надо? У тебя есть тестовый набор данных? Хотя-бы строк несколько тыщ? Книга-название-автор-год издания e.t.c. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 11:40 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz2) Многопоточный и многопроцессорный поиск aka Map\Reduce. Суть в том что коллекция разделяется на части и каждую часть прочесывает отдельный процесс. Сейчас поднять комп в облаке стоит копейки, поэтому для единоразовых акций это отличное решение. Правда, это в некотором роде вышеупомянутый for. С каких пор Map/Reduce стал алгоритмом поиска? Скорее это агрегация данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 14:51 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 14:59 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
HettС каких пор Map/Reduce стал алгоритмом поиска? Скорее это агрегация данных. Он в стеке технологий стоит на шаг выше. А что вы положите в Reduce - подсчёт или поиск это уже особенности имплементации редюсера. Главное - интерфейс соблюдается и контракт весьма либерален. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 15:43 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВо-первых, слово "алгоритм", вроде, до вас тут никто не упоминал. Во-вторых Map/Reduce это способ распределения задач для обработки большого набора данных. Решать этим способом можно разные задачи, а не только считать агрегаты. В-третих, обратимся, например, к википедии. Я исхожу из того, что вопрос был задан: "Как в большой колекции обьектов найти обьект без прямого применения цыкла for?", что, если не "алгоритм" тут можно применить? Вы зачем-то ссылаетесь на какую-то парадигму, но она опять же требует реализации алгоритма, который в ее случае будет еще сложнее, учитывая особенности этой модели. Так зачем вообще предлагать эти решения, когда явно автор не это спрашивает. Просто покидаться умными словами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 15:49 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
авторОн в стеке технологий стоит на шаг выше. А что вы положите в Reduce - подсчёт или поиск В случае Reduce поиск будет сводиться опять же к подсчету. Разве нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 15:52 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Java Stream API не предлагали ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 15:57 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
HettЯ исхожу из того, что вопрос был задан: "Как в большой колекции обьектов найти обьект без прямого применения цыкла for?", что, если не "алгоритм" тут можно применить? Если бы автор хотел "алгоритм", то так бы и написал. Автор сам не знает чего хочет, поэтому спрашивает как оно вообще бывает помимо полного перебора. На этот вопрос я подробно и ответил - два общих подхода, индексирование и распараллеливание. Алгоритмы это частные решения. Автор про них не спрашивал. Если ты знаешь конкретные, "алгоритмы", то ответь автору. Меня ты для чего комментируешь? То что ты не знал про использование MapReduce для поиска, ещё не значит что ты можешь решать за автора темы что ему интересно, а что нет. ОК? HettВы зачем-то ссылаетесь на какую-то парадигму, Затем что она часто используется для поиска во многих NoSQL решениях. Тоже не знал? Hettно она опять же требует реализации алгоритма, который в ее случае будет еще сложнее, учитывая особенности этой модели. Набор слов. HettТак зачем вообще предлагать эти решения, когда явно автор не это спрашивает. Давай, объясни нам что автор спрашивает. HettПросто покидаться умными словами? Железный аргумент от человека, который тут ещё ни одного предложения по теме вопроса не написал, зато уже пару раз обосрался с по вопросу распределенных вычислений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 15:59 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
UsmanJava Stream API не предлагали ? Предлагали: 19209920 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 16:00 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Боюсь что Stream API породит еще больше вопросов. Чувак по сути вас просит подсказать как проиндексировать его данные для поиска. И ему нужен алгоритм и структура данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 16:06 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczUsmanJava Stream API не предлагали ? Предлагали: 19209920 ок, ну, тогда остается Код: java 1. и Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 16:18 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Я думаю ему нужно нечто вроде. Код: java 1. 2. 3. 4. 5. (но здесь нужно вернуть не один док а сет документов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 16:35 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
maytonБоюсь что Stream API породит еще больше вопросов. Чувак по сути вас просит подсказать как проиндексировать его данные для поиска. И ему нужен алгоритм и структура данных. Может там за кадром мощная оптимизация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 21:18 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
NebomaytonБоюсь что Stream API породит еще больше вопросов. Чувак по сути вас просит подсказать как проиндексировать его данные для поиска. И ему нужен алгоритм и структура данных. Может там за кадром мощная оптимизация? Это что разговор инженеров? Давайте бенчмарк. Только перед тем как его начинать имеет смысл оговорить критерии сравнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 22:42 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Раз уж на досугах изучаю этот прекрасный ЯП, то вот моя балалайка: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. сильно не пинайте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2016, 10:23 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
HettРаз уж на досугах изучаю этот прекрасный ЯП, то вот моя балалайка: Стоит обратить внимание на Java 8 и Guava, чтобы не изобретать MultiMap и не писать колбасу из if-ов. К тому же это поможет расширить сознание под функциональное программирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2016, 10:33 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Еще через страниц ~20 окажется что у автора постановка годная для использования Apache Lucene и все мапы идут лесом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2016, 11:14 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
maytonЕще через страниц ~20 окажется что у автора постановка годная для использования Apache Lucene и все мапы идут лесом. Автору темы, как обычно, пофигу. Вбросил и пропал. Дальше сами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2016, 11:15 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
arrt, Как вариант, в качестве ключей можно использовать Enum ( Перечисления ). А вместе с ними EnumMap/EnumSet . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2016, 11:39 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Usmanarrt, Как вариант, в качестве ключей можно использовать Enum ( Перечисления ). А вместе с ними EnumMap/EnumSet . Set - Множество Операции над множествами: Код: java 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2016, 11:49 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Он пишет авторНапример автор-название, автор-год издания. И при поиске по ключу вывод самого ключа, и значений. И если автор введен не полностью - то уже поиск из возможных вариантов. Попробуйте натянуть работу с множествами на эту постановку. И потом он завтра захочет искать издательство-год-издания, автор-соавтор, ISBN.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2016, 12:05 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
maytonИ потом он завтра захочет искать издательство-год-издания, автор-соавтор, ISBN....через пару страниц (: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2016, 12:15 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Был вопрос но он не выяснен. Мой подход имеет смысл? И насколько он эфективен. Но там пара k-v расматривается в контексте: автор-id, названия-id... и т.д. Ведь надо какой то уникальный идентификатор же. Ведь автор-названия может иметь несколько вариантов, и вариантов комбинаций больше, а так только n мапов, которое соответсвует количеству полей колекции, и делает такой подход более схожым с бд... И таким образом нашел ID, и сразу и при ее нахождение перешел к обьекту колекции посредством gеt(id) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2016, 22:17 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
arrtБыл вопрос но он не выяснен. Мой подход имеет смысл? И насколько он эфективен. Но там пара k-v расматривается в контексте: автор-id, названия-id... и т.д. Ведь надо какой то уникальный идентификатор же. Ведь автор-названия может иметь несколько вариантов, и вариантов комбинаций больше, а так только n мапов, которое соответсвует количеству полей колекции, и делает такой подход более схожым с бд... И таким образом нашел ID, и сразу и при ее нахождение перешел к обьекту колекции посредством gеt(id) Ничего не понял. I. 1. В случае работы в оперативной памяти/Java ID нафиг не нужно, т.к. указатель на объект и так замечательно роль ID выполняет 2. Не хватает ID, добавьте его, в чем проблема? arrt\Если использовать отображения то я вижу вариант создания нескольких производных карт. Например автор-название, автор-год издания. И при поиске по ключу вывод самого ключа, и значений......Правильный ли это подход? II. Какое нафиг автор --> название, автор --> год издание? Ключевое поле --> объект. А в объекте уже все данные и хранятся p.s. или я не въехал в тему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2016, 22:30 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, так поле id уже добавили. Как тогда различать обьекты. Как их определить то. This один. Да и если карта состоит из полей - это компоненты одного уровня, а как тогда поле-обьект - автор->this?? author-list.get(id).. Id то ведь уникальное, другие поля хоть не примитивы, а стринги, но обьекты ведь.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 13:10 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
arrtLeonid Kudryavtsev, так поле id уже добавили. Как тогда различать обьекты. Как их определить то. This один. Да и если карта состоит из полей - это компоненты одного уровня, а как тогда поле-обьект - автор->this?? author-list.get(id).. Id то ведь уникальное, другие поля хоть не примитивы, а стринги, но обьекты ведь.. Возможно я плохо соображаю. Но не только смысл текста от меня ускользает, но даже отдельных слов я не знаю ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 13:37 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
arrtLeonid Kudryavtsev, так поле id уже добавили. Как тогда различать обьекты. Как их определить то. This один. Да и если карта состоит из полей - это компоненты одного уровня, а как тогда поле-обьект - автор->this?? author-list.get(id).. Id то ведь уникальное, другие поля хоть не примитивы, а стринги, но обьекты ведь.. Вот тебе серебрянная пуля. https://lucene.apache.org/core/index.html Иди читай. А потом приходи и говори почему не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 14:23 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
кстати.. насчет скорострельности.. кто то говорил что между явой и бд - бд производительнее. типа лучше объем данных грузануть в ИМДБ (не путать с рейтингом кинофильмов), и там проделать операции с объемом данных, типа сортировки выборки и т.п. а теперь вопрос: факт, что есть такая штука, как Н2, факт, что она очень быстрая. она быстрее и мускула и постгреса оракла и т.п. по крайней мере в ряде операций. сами н2шники тесты не озвучивают но, их можно найти да и сам я в этом убеждался. и теперь самое интересное: н2 это не какой то там мегасервер - это ява-приложение. или даже ява-библиотека, интегрируемая в ява приложение. исходя из этого КАК Можно утверждать, что ява делает эти операции хуже, чем классическая полновесная бд? да, я речь не веду о выборке и сортировке 5 миллиардов записей, но того, что можно взять в память и там этим манипулировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 15:46 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Земля тряслась — как наши груди, Смешались в кучу кони, люди.... ( C ) Лермонтов М. Ю andreykaTкстати.. насчет скорострельности.. А как насчет Assembler'а? H2 отстой! Лучше грузаните данные в assembler. Лучше всего в регистр AX - он самый быстрый из всех! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 15:53 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevЗемля тряслась — как наши груди, Смешались в кучу кони, люди.... ( C ) Лермонтов М. Ю andreykaTкстати.. насчет скорострельности.. А как насчет Assembler'а? H2 отстой! Лучше грузаните данные в assembler. Лучше всего в регистр AX - он самый быстрый из всех! Ну вы же понимаете, что в данном случае трудозатраты будут мало соизмеримы с выхлопом А что с н2 не так - полная поддержка скля, для тестов супер, для небольших приложений еще круче, чем супер. ну а всё же вопрос не в этом. просто я не понимаю утверждения что имдб для операций с объемами быстрее явы даже в том случае, что эта имдб сама написана на яве ))) это, простите, КАК? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 15:56 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Процитируйте утверждение, которое Вы не понимаете, еще раз ? Желательно добуквенно и со ссылкой на источник, что бы не выдергивать из контекста. Java - язык программирования общего назначения, не СУБД СУБД - система управления базами данных, а отнюдь не язык программирования БД - обычно хранят большое кол-во информации, которое, не факт, что поместиться в ОП In memory DB - специальный случай БД относительно небольшого объема, но обычно более производительные и так далее. Мухи это одно, котлеты другое. Сравнивать мух с котлетами - конечно можно, но бессмысленно. andreykaTКАК? Как как, кверху ... ( C ) народная мудрость. andreykaTНу вы же понимаете, что в данном случае трудозатраты будут мало соизмеримы с выхлопом Совершенно соизмеримы mov ax, данные - положить данные в регистровую СУБД mov куда_нибудь, ax - извлечь данные Трудозатраты стремятся к 0, выхлоп тоже стремится к 0 ))). Вполне соизмеримо. Зато гарантированно самый быстрый способ. Можно даже целые 16 бит сохранить!!! Никакая БД данных с этим способом и близко не стоит. 1 транзакция - 1 так процессора и даже быстрее !!!! Т.к. данные инструкции вообще zero latency. ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 16:13 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryav спасибо, посмеялся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 16:16 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
andreykaTфакт, что есть такая штука, как Н2, факт, что она очень быстрая. она быстрее и мускула и постгреса оракла и т.п. по крайней мере в ряде операций. сами н2шники тесты не озвучивают но, их можно найти да и сам я в этом убеждался. и теперь самое интересное: н2 это не какой то там мегасервер - это ява-приложение. или даже ява-библиотека, интегрируемая в ява приложение. Она скорее не быстрая а удобная. Т.к. работает в одном адресном пространстве с твоим приложением. Рискну предположить что тесты которые ты смотрел были ПРО ЭТО. Как следствие накладные расходы на callback 1-й функции у нее будут почти нулевые т.к. нет Network/IPC взаимодействия. По части производительности. Я как-то грузил в H2 данные по географии - у нее были трудности на нескольких миллионах с коммитом. Правда это было в 2009 году. Возможно щас стало получше. По поводу самого-самого быстрого в мире. Есть сайтик с тестами http://www.tpc.org/default.asp где устраивают соревнования. Обычно это MSSQL/Oracle/DB2 и еще несколько систем название которых мне ни о чем не говорит. Вобщем почитай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 16:41 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
mayton, из реальной практики делал в mssql поиск where поле like '%ghg%' and поле like '%hgh%', 10 000 000, записей время поиска при условии, что искомого нет, т.е. просмотр всей таблицы 4сек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 16:57 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
OFFTOPIC ON maytonТ.к. работает в одном адресном пространстве с твоим приложением. Рискну предположить что тесты которые ты смотрел были ПРО ЭТО. Как следствие накладные расходы на callback 1-й функции у нее будут почти нулевые т.к. нет Network/IPC взаимодействия. Сейчас использую SQL Lite 3 (сейчас табличка до 40 мил.строк, вообще может быть 100-200 лямов) Сравнивал с PostgreSQL, разница получилась около в 7-10 раз более быстрые атомарные insert/select. maytonПо части производительности. Я как-то грузил в H2 данные по географии - у нее были трудности на нескольких миллионах с коммитом. Правда это было в 2009 году. Возможно щас стало получше. На SQL Lite комичу примерно по 1 ляму за раз, при объеме таблички > 10-20 мил. строк операция insert становится заметно медленнее ((( Думаю, что все дело в размере кеша. Но пока не разбирался. Скорость вставки для меня приемлемая, но хочется значительно быстрее ((( Возможно, заменю на что нибудь другое (пока нормальной key-value базы не нашел) p.s. нормальность: 1. наличие бинарного (скопилированно) кода под Linux / Windows, интерфейс для Java 2. относительно приличный сайт/документация. Т.к. документация типа http://www.mapdb.org/ где вообще ничего не понятно, как оно внутри работает и чем один класс от другого отличается - лично мне доверия не внушает ((( 3. Ясная free лицензия Google Level DB и SQL Lite 4 из-за п.1. пошло лесом. Google Level DB Windows указывает в качестве supported платформы, но бинарников под Windows на оф. сайте не увидел. Существующие инструкции сборки под Windows с описаниями - "мы не поняли, чем заменять эти функции, выкинули нафиг, но вроде пока работает" ))) доверия не вселяют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 17:02 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, большие вставки делают обычно средствами самой скбд прямо из файла csv ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 17:11 |
|
||
|
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Wow-wow! .... меня совершенно не удивляют эти цифры. Более того я готов кивать, когда мне говорят - уууу.... а уменя сто тыщ мильонов апдейтов в сек. пролетело. Я киваю головой и верю. И такое бывает. И вобщем предлагаю вернуться к афтору. Иначе мы скатимся в обсуждение Стебельков :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 17:41 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2124005]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
82ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
105ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 488ms |

| 0 / 0 |
