powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
25 сообщений из 59, страница 2 из 3
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242413
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettС каких пор Map/Reduce стал алгоритмом поиска? Скорее это агрегация данных.
Он в стеке технологий стоит на шаг выше. А что вы положите в Reduce - подсчёт или поиск
это уже особенности имплементации редюсера. Главное - интерфейс соблюдается и контракт весьма
либерален.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242424
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВо-первых, слово "алгоритм", вроде, до вас тут никто не упоминал.
Во-вторых Map/Reduce это способ распределения задач для обработки большого набора данных. Решать этим способом можно разные задачи, а не только считать агрегаты.
В-третих, обратимся, например, к википедии.

Я исхожу из того, что вопрос был задан:

"Как в большой колекции обьектов найти обьект без прямого применения цыкла for?",
что, если не "алгоритм" тут можно применить?

Вы зачем-то ссылаетесь на какую-то парадигму, но она опять же требует реализации алгоритма, который в ее случае будет еще сложнее, учитывая особенности этой модели.
Так зачем вообще предлагать эти решения, когда явно автор не это спрашивает. Просто покидаться умными словами?
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242430
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОн в стеке технологий стоит на шаг выше. А что вы положите в Reduce - подсчёт или поиск
В случае Reduce поиск будет сводиться опять же к подсчету. Разве нет?
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242440
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Java Stream API не предлагали ?
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242445
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettЯ исхожу из того, что вопрос был задан:
"Как в большой колекции обьектов найти обьект без прямого применения цыкла for?",
что, если не "алгоритм" тут можно применить?
Если бы автор хотел "алгоритм", то так бы и написал. Автор сам не знает чего хочет, поэтому спрашивает как оно вообще бывает помимо полного перебора. На этот вопрос я подробно и ответил - два общих подхода, индексирование и распараллеливание.
Алгоритмы это частные решения. Автор про них не спрашивал. Если ты знаешь конкретные, "алгоритмы", то ответь автору. Меня ты для чего комментируешь? То что ты не знал про использование MapReduce для поиска, ещё не значит что ты можешь решать за автора темы что ему интересно, а что нет. ОК?

HettВы зачем-то ссылаетесь на какую-то парадигму,
Затем что она часто используется для поиска во многих NoSQL решениях. Тоже не знал?

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

HettТак зачем вообще предлагать эти решения, когда явно автор не это спрашивает.
Давай, объясни нам что автор спрашивает.

HettПросто покидаться умными словами?
Железный аргумент от человека, который тут ещё ни одного предложения по теме вопроса не написал, зато уже пару раз обосрался с по вопросу распределенных вычислений.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242449
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanJava Stream API не предлагали ?
Предлагали: 19209920
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242456
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боюсь что Stream API породит еще больше вопросов. Чувак по сути вас просит подсказать
как проиндексировать его данные для поиска. И ему нужен алгоритм и структура данных.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242475
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczUsmanJava Stream API не предлагали ?
Предлагали: 19209920 ок, ну, тогда остается
Код: java
1.
while() { }

и
Код: java
1.
do { } while()
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242498
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю ему нужно нечто вроде.

Код: java
1.
2.
3.
4.
5.
Map<FuckenSearchKeys,FuckenDocument> map = new HashMap<>();
... add index

... lookup
FuckenDocument = map.get(fuckenSearchKeys);


(но здесь нужно вернуть не один док а сет документов)
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242728
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonБоюсь что Stream API породит еще больше вопросов. Чувак по сути вас просит подсказать
как проиндексировать его данные для поиска. И ему нужен алгоритм и структура данных.

Может там за кадром мощная оптимизация?
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242754
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NebomaytonБоюсь что Stream API породит еще больше вопросов. Чувак по сути вас просит подсказать
как проиндексировать его данные для поиска. И ему нужен алгоритм и структура данных.

Может там за кадром мощная оптимизация?
Это что разговор инженеров? Давайте бенчмарк. Только перед тем как его начинать
имеет смысл оговорить критерии сравнения.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242925
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз уж на досугах изучаю этот прекрасный ЯП, то вот моя балалайка:

Код: 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.
import java.util.*;

public class Main {

    public static void main(String[] args) {

        class IndexedCollection<K, V> extends HashMap<Integer, HashMap<K, V>> {
            public HashMap<V, HashMap<K, ArrayList<Integer>>> indexes = new HashMap<>();
            private int autoIncrementId = 0;

            private int getNextId() {
                return autoIncrementId++;
            }

            public HashMap<K, V> put(HashMap<K, V> e) {
                int id = getNextId();
                for (Map.Entry<K, V> entry : e.entrySet()) {
                    HashMap<K, ArrayList<Integer>> values = indexes.get(entry.getValue());
                    if (values == null) {
                        values = new HashMap<>();
                        indexes.put(entry.getValue(), values);
                    }
                    ArrayList<Integer> ids = values.get(entry.getKey());
                    if (ids == null) {
                        ids = new ArrayList<>();
                        values.put(entry.getKey(), ids);
                    }
                    ids.add(id);
                }
                return super.put(id, e);
            }

            public HashMap<K, V> get(int index) {
                return super.get(index);
            }

            public HashSet<Integer> find(HashMap<K, V> e) {
                HashSet<Integer> result = new HashSet<>();
                for (Map.Entry<K, V> entry : e.entrySet()) {
                    HashMap<K, ArrayList<Integer>> values = indexes.get(entry.getValue());
                    if (values != null) {
                        ArrayList<Integer> ids = values.get(entry.getKey());
                        if (ids != null) {
                            if (result.isEmpty()) {
                                result.addAll(ids);
                            } else {
                                result.retainAll(result);
                            }
                        } else {
                            return new HashSet<>();
                        }
                    } else {
                        return new HashSet<>();
                    }
                }
                return result;
            }
        }

        // test
        IndexedCollection<String, String> collection = new IndexedCollection<>();

        System.out.println("Generating data...");
        Random rn = new Random();
//        for (int i = 0; i < 1000000; i++) {
//            HashMap<String, String> e = new HashMap<>();
//            e.put("field_1", Integer.toString(rn.nextInt(10000)));
//            e.put("field_2", Integer.toString(rn.nextInt(10000)));
//            e.put("field_3", Integer.toString(rn.nextInt(10000)));
//            collection.put(e);
//        }

        {
            HashMap<String, String> e = new HashMap<>();
            e.put("field_1", "value_1");
            e.put("field_2", "value_2");
            e.put("field_3", "value_3");
            collection.put(e);
        }

        HashMap<String, String> e = new HashMap<>();
        e.put("field_1", "value_1");
        e.put("field_2", "value_2");

        HashSet<Integer> result = collection.find(e);
        System.out.println("Found ids: " + result.toString());

        System.out.println("Found data");

        for (int id : result) {
            System.out.println(collection.get(id));
        }

    }
}



сильно не пинайте
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39242937
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettРаз уж на досугах изучаю этот прекрасный ЯП, то вот моя балалайка:
Стоит обратить внимание на Java 8 и Guava, чтобы не изобретать MultiMap и не писать колбасу из if-ов. К тому же это поможет расширить сознание под функциональное программирование.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39243004
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще через страниц ~20 окажется что у автора постановка годная для использования Apache Lucene
и все мапы идут лесом.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39243007
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕще через страниц ~20 окажется что у автора постановка годная для использования Apache Lucene
и все мапы идут лесом.
Автору темы, как обычно, пофигу. Вбросил и пропал. Дальше сами.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39243030
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrt,

Как вариант, в качестве ключей можно использовать Enum ( Перечисления ).
А вместе с ними EnumMap/EnumSet .
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39243035
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanarrt,

Как вариант, в качестве ключей можно использовать Enum ( Перечисления ).
А вместе с ними EnumMap/EnumSet .
Set - Множество

Операции над множествами:
Код: java
1.
2.
3.
4.
s1.containsAll(s2) //— TRUE - если s1 содержит s2 (является подмножеством)
s1.addAll(s2)      //— Объединение
s1.retainAll(s2)   //— Пересечение
s1.removeAll(s2)   //— Разность
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39243053
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он пишет
авторНапример автор-название, автор-год издания. И при поиске по ключу вывод самого ключа, и значений. И если автор введен не полностью - то уже поиск из возможных вариантов.
Попробуйте натянуть работу с множествами на эту постановку.
И потом он завтра захочет искать издательство-год-издания, автор-соавтор, ISBN....
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39243070
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИ потом он завтра захочет искать издательство-год-издания, автор-соавтор, ISBN....через пару страниц (:
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39248523
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Был вопрос но он не выяснен. Мой подход имеет смысл? И насколько он эфективен. Но там пара k-v расматривается в контексте: автор-id, названия-id... и т.д. Ведь надо какой то уникальный идентификатор же. Ведь автор-названия может иметь несколько вариантов, и вариантов комбинаций больше, а так только n мапов, которое соответсвует количеству полей колекции, и делает такой подход более схожым с бд... И таким образом нашел ID, и сразу и при ее нахождение перешел к обьекту колекции посредством gеt(id)
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39248527
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrtБыл вопрос но он не выяснен. Мой подход имеет смысл? И насколько он эфективен. Но там пара k-v расматривается в контексте: автор-id, названия-id... и т.д. Ведь надо какой то уникальный идентификатор же. Ведь автор-названия может иметь несколько вариантов, и вариантов комбинаций больше, а так только n мапов, которое соответсвует количеству полей колекции, и делает такой подход более схожым с бд... И таким образом нашел ID, и сразу и при ее нахождение перешел к обьекту колекции посредством gеt(id)
Ничего не понял.
I.
1. В случае работы в оперативной памяти/Java ID нафиг не нужно, т.к. указатель на объект и так замечательно роль ID выполняет
2. Не хватает ID, добавьте его, в чем проблема?

arrt\Если использовать отображения то я вижу вариант создания нескольких производных карт. Например автор-название, автор-год издания. И при поиске по ключу вывод самого ключа, и значений......Правильный ли это подход?
II.
Какое нафиг автор --> название, автор --> год издание? Ключевое поле --> объект. А в объекте уже все данные и хранятся

p.s. или я не въехал в тему
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39248998
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev, так поле id уже добавили. Как тогда различать обьекты. Как их определить то. This один. Да и если карта состоит из полей - это компоненты одного уровня, а как тогда поле-обьект - автор->this?? author-list.get(id).. Id то ведь уникальное, другие поля хоть не примитивы, а стринги, но обьекты ведь..
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39249046
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrtLeonid Kudryavtsev, так поле id уже добавили. Как тогда различать обьекты. Как их определить то. This один. Да и если карта состоит из полей - это компоненты одного уровня, а как тогда поле-обьект - автор->this?? author-list.get(id).. Id то ведь уникальное, другие поля хоть не примитивы, а стринги, но обьекты ведь..
Возможно я плохо соображаю. Но не только смысл текста от меня ускользает, но даже отдельных слов я не знаю )))
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39249125
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrtLeonid Kudryavtsev, так поле id уже добавили. Как тогда различать обьекты. Как их определить то. This один. Да и если карта состоит из полей - это компоненты одного уровня, а как тогда поле-обьект - автор->this?? author-list.get(id).. Id то ведь уникальное, другие поля хоть не примитивы, а стринги, но обьекты ведь..
Вот тебе серебрянная пуля.

https://lucene.apache.org/core/index.html

Иди читай. А потом приходи и говори почему не подходит.
...
Рейтинг: 0 / 0
Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
    #39249243
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати.. насчет скорострельности.. кто то говорил что между явой и бд - бд производительнее. типа лучше объем данных грузануть в ИМДБ (не путать с рейтингом кинофильмов), и там проделать операции с объемом данных, типа сортировки выборки и т.п.

а теперь вопрос:

факт, что есть такая штука, как Н2,
факт, что она очень быстрая. она быстрее и мускула и постгреса оракла и т.п. по крайней мере в ряде операций. сами н2шники тесты не озвучивают но, их можно найти да и сам я в этом убеждался.
и теперь самое интересное: н2 это не какой то там мегасервер - это ява-приложение. или даже ява-библиотека, интегрируемая в ява приложение.

исходя из этого КАК Можно утверждать, что ява делает эти операции хуже, чем классическая полновесная бд?

да, я речь не веду о выборке и сортировке 5 миллиардов записей, но того, что можно взять в память и там этим манипулировать.
...
Рейтинг: 0 / 0
25 сообщений из 59, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в большой колекции обьектов найти обьект без прямого применения цыкла for?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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