Ну да, а потом какой-нибудь умник ради одноразовой операции преобразует массив в неупорядоченную таблицу якобы для ускорения поиска.АццкоМото wrote: ↑08 Oct 2018 23:05Ну вот да, хотя бы как-то так. Даже полученное с сервера в виде массива сохранить во что-то отличное от массива/ArrayList почему-то большинству в голову не приходитvalchkou wrote: ↑08 Oct 2018 21:24Code: Select all
boolean isItemInCart(Item item) { return cart.getItems().contains(item); }
Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов.
55+ в ИТ
-
- Уже с Приветом
- Posts: 12785
- Joined: 27 Sep 2007 22:53
Re: 55+ в ИТ
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
Не знаю, о чем речь. Во первых, корзина может содержать много чего, кроме спейска товаров. Ну, допустим, айди магазина. Во-вторых, не понятно при чем тут сборщик мусора. getItems() же возвращает ссылку на коллекцию. Никакие новые абекты не создаются (ну, если, конечно, реализовывал не идиот)Мальчик-Одуванчик wrote: ↑08 Oct 2018 23:14Ну когда одно говно превращается в точно такое же, но с вишенкой сверху то это явно проблемма дизайна структуры данных.АццкоМото wrote: ↑08 Oct 2018 23:06а в чем проблема-то?Мальчик-Одуванчик wrote: ↑08 Oct 2018 21:48 cart.getItems() - переливаем из пустого в порожнее?
Сборщик мусора все стерпит.
И на мой взгляд это явный косяк: чтобы узнать свойство обьекта преобразовывать его к обьекту другого типа.
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
В общем случае не вижу ничего предосудительного.Мальчик-Одуванчик wrote: ↑08 Oct 2018 23:26Ну да, а потом какой-нибудь умник ради одноразовой операции преобразует массив в неупорядоченную таблицу якобы для ускорения поиска.АццкоМото wrote: ↑08 Oct 2018 23:05Ну вот да, хотя бы как-то так. Даже полученное с сервера в виде массива сохранить во что-то отличное от массива/ArrayList почему-то большинству в голову не приходитvalchkou wrote: ↑08 Oct 2018 21:24Code: Select all
boolean isItemInCart(Item item) { return cart.getItems().contains(item); }
Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов.
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 12785
- Joined: 27 Sep 2007 22:53
Re: 55+ в ИТ
Что налагает более жесткие требования устойчивости к исключениям для методов корзины.
Ведь так легко сделать данные несогласовынными если исключение вылетело между операцией изменения корзины и обновлением счетчика.
-
- Уже с Приветом
- Posts: 12785
- Joined: 27 Sep 2007 22:53
-
- Уже с Приветом
- Posts: 3721
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: 55+ в ИТ
согласен что интереснее, но не согласен что не бином.
добавим сюда вполне ожидаемые требования по high availability, scalability, latency и задача сразу превращается в нетривиальный проект.
-
- Уже с Приветом
- Posts: 12785
- Joined: 27 Sep 2007 22:53
Re: 55+ в ИТ
В случае если результат этого преобразования больше нигде не используется, то накладные расходы на создание новой одноразовой структуры данных чаще всего окажутся больше тупого линейного поиска, что и будет типичным переливанием из пустого в порожнее.АццкоМото wrote: ↑08 Oct 2018 23:29В общем случае не вижу ничего предосудительного.Мальчик-Одуванчик wrote: ↑08 Oct 2018 23:26Ну да, а потом какой-нибудь умник ради одноразовой операции преобразует массив в неупорядоченную таблицу якобы для ускорения поиска.АццкоМото wrote: ↑08 Oct 2018 23:05Ну вот да, хотя бы как-то так. Даже полученное с сервера в виде массива сохранить во что-то отличное от массива/ArrayList почему-то большинству в голову не приходитvalchkou wrote: ↑08 Oct 2018 21:24Code: Select all
boolean isItemInCart(Item item) { return cart.getItems().contains(item); }
Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов.
В этом действительно нет ничего предосудительного, сборщик мусора и не такое стерпит.
-
- Уже с Приветом
- Posts: 3721
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: 55+ в ИТ
мы видим задачу по разному, в данном примере я предположил чтоМальчик-Одуванчик wrote: ↑08 Oct 2018 23:45В случае если результат этого преобразования больше нигде не используется, то накладные расходы на создание новой структуры данных чаще всего окажутся больше тупого линейного поиска, что и будет типичным переливанием из пустого в порожнее.АццкоМото wrote: ↑08 Oct 2018 23:29В общем случае не вижу ничего предосудительного.Мальчик-Одуванчик wrote: ↑08 Oct 2018 23:26Ну да, а потом какой-нибудь умник ради одноразовой операции преобразует массив в неупорядоченную таблицу якобы для ускорения поиска.АццкоМото wrote: ↑08 Oct 2018 23:05Ну вот да, хотя бы как-то так. Даже полученное с сервера в виде массива сохранить во что-то отличное от массива/ArrayList почему-то большинству в голову не приходитvalchkou wrote: ↑08 Oct 2018 21:24Code: Select all
boolean isItemInCart(Item item) { return cart.getItems().contains(item); }
Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов.
cart.getItems() не создает никаких коллекций, а попросту возвращает референс на коллекцию спрятанную внутри объекта cart.
причем имплементация коллекции может быть как массивом так и hash based structure.
но нам по барабану потому как они все имплементируют метод contains().
с другой стороны такой подход не надежен, потому как можно подменить содержимое cart не используя никаких add or set методов.
или даже словить concurrent ex если допустить что один поток пишет а другой ищет
-
- Уже с Приветом
- Posts: 56969
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: 55+ в ИТ
народ, неужели сборщики мусора по-прежнему куются вручную?!
-
- Уже с Приветом
- Posts: 12785
- Joined: 27 Sep 2007 22:53
Re: 55+ в ИТ
Тогда предположим дальше что самописный метод getItem(i) не выкидывает исключений, что нельзя сказать про метод contains.valchkou wrote: ↑08 Oct 2018 23:54 мы видим задачу по разному, в данном примере я предположил что
cart.getItems() не создает никаких коллекций, а попросту возвращает референс на коллекцию спрятанную внутри объекта cart.
причем имплементация коллекции может быть как массивом так и hash based structure.
но нам по барабану потому как они все имплементируют метод contains().
-
- Уже с Приветом
- Posts: 12785
- Joined: 27 Sep 2007 22:53
-
- Уже с Приветом
- Posts: 56969
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: 55+ в ИТ
У мужика нормальный читаемый код, скорее всего для данной задачи можно обойтись перебором. Меня напрягло, чтотне взбрасывается exception, если в корзине обнаружен item which is null.
-
- Уже с Приветом
- Posts: 9560
- Joined: 26 Mar 2011 23:02
- Location: Russia -> Orlando, FL
Re: 55+ в ИТ
Откуда там null может появиться?
Стареет Комиссар. Комиссар уже не тот.

Пример с корзиной конечно некорректный, но смысл понятен, что плохо просто сканировать огромный массив.
Человек никогда не бывает так несчастен, как ему кажется, или так счастлив, как ему хочется. (Франсуа де Ларошфуко)
-
- Уже с Приветом
- Posts: 1123
- Joined: 10 Jan 2000 10:01
- Location: Хьюстон
Re: 55+ в ИТ
У нас было бы примерно так 
Items это LINQ обертка над Item[], внутре у нее неонка которая в генерируемом javascript дергает find, fiter и проч.
Проверку аргументов на null в private методах обычно не делаем

Code: Select all
private isItemInCart(item: Item): boolean {
return this.cart.Items.Any(cartItem => cartItem.Id === item.Id);
}
Проверку аргументов на null в private методах обычно не делаем
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
это верно. стало быть, нужно взвешивать риски, плюсы-минусы и все такое. ИМЕННО ЭТО есть то, за что платят инжинегру. а не за обход дереваМальчик-Одуванчик wrote: ↑08 Oct 2018 23:35Что налагает более жесткие требования устойчивости к исключениям для методов корзины.
Ведь так легко сделать данные несогласовынными если исключение вылетело между операцией изменения корзины и обновлением счетчика.
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
та ни, все как valchkou понял: Cart имеет кучу полей, одно из них - спейсок CartItems. getter просто возвращает ссылку на этот спейсокМальчик-Одуванчик wrote: ↑08 Oct 2018 23:39Тут я честно не понял. Разве getItems() не создает эту саму коллекцию, то есть новую структуру данных, отличающуюся от cart?
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
я бы сказал, что нетривиально будет все это делать с нуля и самому. но все колеса изобретены до нас и в буквально несколько строк это можно сделать с RxJava или другой подобной "реактивной" бляблятекой. но чтобы высрать эти несколько строк у Интерраптушки уйдет полчаса, у меня - день-два, а у некоторых не выйдет вовсе
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
Да, это ок, но по сути то же самое. Почему не рассмотреть HashSet<Item> или HashMap<Id, Item> ? Не всегда это лучшее решение, но очень частоmajor Major Major Major wrote: ↑09 Oct 2018 16:40 У нас было бы примерно так
Items это LINQ обертка над Item[], внутре у нее неонка которая в генерируемом javascript дергает find, fiter и проч.Code: Select all
private isItemInCart(item: Item): boolean { return this.cart.Items.Any(cartItem => cartItem.Id === item.Id); }
Проверку аргументов на null в private методах обычно не делаем
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
Проблема в том, что вы примерно схожего возраста. Поэтому для вас это норм код. Для меня - нет, хоть я себя и чувствую стариком. Приемлемый 30-летний погромист просто блеванет
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 1123
- Joined: 10 Jan 2000 10:01
- Location: Хьюстон
Re: 55+ в ИТ
Все зависит от задачи. Если мы про shopping cart то количество предметов в ней не будет того порядка когда разница между hashmap будет существенна и оправданна. Плюс кто сказал что надо будет всегда искать по id? А по категории товара, по количеству, по стоимости?АццкоМото wrote: ↑09 Oct 2018 17:09Да, это ок, но по сути то же самое. Почему не рассмотреть HashSet<Item> или HashMap<Id, Item> ? Не всегда это лучшее решение, но очень частоmajor Major Major Major wrote: ↑09 Oct 2018 16:40 У нас было бы примерно так
Items это LINQ обертка над Item[], внутре у нее неонка которая в генерируемом javascript дергает find, fiter и проч.Code: Select all
private isItemInCart(item: Item): boolean { return this.cart.Items.Any(cartItem => cartItem.Id === item.Id); }
Проверку аргументов на null в private методах обычно не делаем
Я не против быстрого кода, у меня задачи часто такие что без оптимизации просто никуда, но оптимизировать и усложнять там где можно обойтись чем то простым и надежным считаю напрасной тратой времени. То есть если бы речь шла о методе isItemInOrderHistory() то бяда пичалька, а так не особо.
Если не считать что твой старпер не верит в электречество и array.find() не использует, не говоря уже про LINQ. Code review у меня бы по этому не прошел. Читабельность страдает
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
Я там выше в цитате два ключевых момента выделил. Да, не всегда ХэшМап/Таблица это лучшее решение. Но а) их нужно рассмотреть как вариант бэ) даже перебор нужно делать элегантнееmajor Major Major Major wrote: ↑09 Oct 2018 17:18Все зависит от задачи. Если мы про shopping cart то количество предметов в ней не будет того порядка когда разница между hashmap будет существенна и оправданна. Плюс кто сказал что надо будет всегда искать по id? А по категории товара, по количеству, по стоимости?АццкоМото wrote: ↑09 Oct 2018 17:09Да, это ок, но по сути то же самое. Почему не рассмотреть HashSet<Item> или HashMap<Id, Item> ? Не всегда это лучшее решение, но очень частоmajor Major Major Major wrote: ↑09 Oct 2018 16:40 У нас было бы примерно так
Items это LINQ обертка над Item[], внутре у нее неонка которая в генерируемом javascript дергает find, fiter и проч.Code: Select all
private isItemInCart(item: Item): boolean { return this.cart.Items.Any(cartItem => cartItem.Id === item.Id); }
Проверку аргументов на null в private методах обычно не делаем
Я не против быстрого кода, у меня задачи часто такие что без оптимизации просто никуда, но оптимизировать и усложнять там где можно обойтись чем то простым и надежным считаю напрасной тратой времени. То есть если бы речь шла о методе isItemInOrderHistory() то бяда пичалька, а так не особо.
Если не считать что твой старпер не верит в электречество и array.find() не использует, не говоря уже про LINQ. Code review у меня бы по этому не прошел. Читабельность страдает
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 3721
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: 55+ в ИТ
если мы говорим про агрегацию 100500 миллионов, то одной блятекой тут не обойтись даже интерапту, не зря же наворотили разных хадупов, спарков и следом распределенных in-memory DB.АццкоМото wrote: ↑09 Oct 2018 17:07я бы сказал, что нетривиально будет все это делать с нуля и самому. но все колеса изобретены до нас и в буквально несколько строк это можно сделать с RxJava или другой подобной "реактивной" бляблятекой. но чтобы высрать эти несколько строк у Интерраптушки уйдет полчаса, у меня - день-два, а у некоторых не выйдет вовсе
сначала нужно все это барахло найти поставить настроить и только потом можно будет немного расслабившись налить чайку и написать несколько строчек работающего кода.
-
- Уже с Приветом
- Posts: 12785
- Joined: 27 Sep 2007 22:53
Re: 55+ в ИТ
Ну тогда по идее самое оно параметризовать тип контейнера в реализации и специализировать функцию поиска, если она отличается от тривиального find()major Major Major Major wrote: ↑09 Oct 2018 17:18 Если не считать что твой старпер не верит в электречество и array.find() не использует, не говоря уже про LINQ. Code review у меня бы по этому не прошел. Читабельность страдает
-
- Уже с Приветом
- Posts: 56969
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: 55+ в ИТ
От бага в другом модуле.
-
- Уже с Приветом
- Posts: 748
- Joined: 06 Jul 2016 18:30
Re: 55+ в ИТ
[map][/map]
Что под капотом тот же обход листа
На самом деле 30-летний погромист учился кодить на питоне, поэтому он выдаст чтото вроде
Code: Select all
def isInCart(item, cart):
return len(filter(lambda x: x.getId() == item.getId(), cart.getItems())) > 0