Тут я честно не понял. Разве getItems() не создает эту саму коллекцию, то есть новую структуру данных, отличающуюся от cart?
55+ в ИТ
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: 55+ в ИТ
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: 55+ в ИТ
согласен что интереснее, но не согласен что не бином.АццкоМото wrote: 08 Oct 2018 23:05 Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов. Тоже вроде бы не бином ньютона, а мало кто напишет эффективно.
добавим сюда вполне ожидаемые требования по high availability, scalability, latency и задача сразу превращается в нетривиальный проект.
-
- Уже с Приветом
- Posts: 15526
- 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: 4195
- 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: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
-
- Уже с Приветом
- Posts: 15526
- 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: 15526
- Joined: 27 Sep 2007 22:53
Re: 55+ в ИТ
Да, так же как и аллокаторы для определенных типов данных. Не так давно на Хабре хороший пример на эту тему приводился.
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: 55+ в ИТ
У мужика нормальный читаемый код, скорее всего для данной задачи можно обойтись перебором. Меня напрягло, чтотне взбрасывается exception, если в корзине обнаружен item which is null.
-
- Уже с Приветом
- Posts: 9563
- Joined: 26 Mar 2011 23:02
- Location: Russia -> Orlando, FL
Re: 55+ в ИТ
Откуда там null может появиться?Komissar wrote: 09 Oct 2018 07:49 У мужика нормальный читаемый код, скорее всего для данной задачи можно обойтись перебором. Меня напрягло, чтотне взбрасывается exception, если в корзине обнаружен item which is null.
Стареет Комиссар. Комиссар уже не тот.

Пример с корзиной конечно некорректный, но смысл понятен, что плохо просто сканировать огромный массив.
Человек никогда не бывает так несчастен, как ему кажется, или так счастлив, как ему хочется. (Франсуа де Ларошфуко)
-
- Уже с Приветом
- Posts: 1321
- 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: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
это верно. стало быть, нужно взвешивать риски, плюсы-минусы и все такое. ИМЕННО ЭТО есть то, за что платят инжинегру. а не за обход дереваМальчик-Одуванчик wrote: 08 Oct 2018 23:35Что налагает более жесткие требования устойчивости к исключениям для методов корзины.АццкоМото wrote: 08 Oct 2018 23:05 ИЧСХ даже тривиальное решение типа "а зачем считать при необходимости, можно же счетчик менять, когда добавляем/удаляем" тоже мало кто даст
Ведь так легко сделать данные несогласовынными если исключение вылетело между операцией изменения корзины и обновлением счетчика.
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15276
- 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: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
я бы сказал, что нетривиально будет все это делать с нуля и самому. но все колеса изобретены до нас и в буквально несколько строк это можно сделать с RxJava или другой подобной "реактивной" бляблятекой. но чтобы высрать эти несколько строк у Интерраптушки уйдет полчаса, у меня - день-два, а у некоторых не выйдет вовсеvalchkou wrote: 08 Oct 2018 23:39согласен что интереснее, но не согласен что не бином.АццкоМото wrote: 08 Oct 2018 23:05 Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов. Тоже вроде бы не бином ньютона, а мало кто напишет эффективно.
добавим сюда вполне ожидаемые требования по high availability, scalability, latency и задача сразу превращается в нетривиальный проект.
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15276
- 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: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
Проблема в том, что вы примерно схожего возраста. Поэтому для вас это норм код. Для меня - нет, хоть я себя и чувствую стариком. Приемлемый 30-летний погромист просто блеванетKomissar wrote: 09 Oct 2018 07:49 У мужика нормальный читаемый код, скорее всего для данной задачи можно обойтись перебором. Меня напрягло, чтотне взбрасывается exception, если в корзине обнаружен item which is null.
Мат на форуме запрещен, блдж!