BG Development


Страници: (3) 1 2 [3]   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Обхождане на двойки елементи в LinkedList
Lachezar
  Публикувано на: 16-05-2017, 13:31
Quote Post



Име: Лъчезар Добрев
Група: Потребител
Ранг: Почетен член

Мнения: 2603
Регистриран на: 10.11.04



QUOTE (necroleak @ 16-05-2017, 12:23)
CPU branch prediction - почти винаги е по-добре Array, отколкото List, ако ще има редовни обхождания.

Да, виждал съм това: списък, който расте постоянно, после се прочита само веднъж. Preamture optiMisation Syndrome.

QUOTE (necroleak @ 16-05-2017, 12:23)
Никога не съм ползвал конструктора  LinkedList.ListItr(index). IMO, направо ще е най-добре да го разкарат, въпреки size >> 1 хитринките. icon_wink.gif

Моля те: „не знам как да използвам това, затова по-добре да го махнат“.


--------------------
И'м ватцхинг ъоу...
PMUsers Website
Top
necroleak
Публикувано на: 16-05-2017, 13:52
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 679
Регистриран на: 08.09.06



Виждал си неприятни работи. Време е да смениш работното място. icon_smile.gif

Това мнение е било редактирано от necroleak на 16-05-2017, 21:00
PMEmail Poster
Top
Pascal
Публикувано на: 16-05-2017, 15:30
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 679
Регистриран на: 22.11.06



QUOTE (Lachezar @ 16-05-2017, 11:57)
@Pascal: Всъщност можеш да направиш засечка: един итератор отпред-назад, и втори итератор отзад-напред, като първия въртиш от началото до края, а втория от края до текущия елемент на първия итератор:...

Аз мисля, че FidelDahan точно това имаше предвид тук...

QUOTE (FidelDahan @ 15-05-2017, 11:28)

Един тук предлага алтернатива с 2 итератора, които обаче обхождат от краищата и се срещат по средата. Може би това е по-добро, защото не се усложнява кода със собствени итераторски типове.
http://stackoverflow.com/questions/7758202...terator-in-java
PMEmail Poster
Top
Bender
Публикувано на: 16-05-2017, 16:23
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 4076
Регистриран на: 19.06.14



Според мен е най-добре д аси използва arraylist -> получаваш О(1) достъп д оелемент чрез индекса му, а също консумира доста по-малко памет от свързания списък: https://kjellkod.wordpress.com/2012/08/08/j...ynamicintarray/


--------------------
Живота е спагети, кода за да работи добре трябва да го наподобява - Дон Реба
...
Живеем в греховни времена, какво очакваш богоугоден и благочестив код ли? - Дон Реба
...
много положителна енергия черпя от вас двамата,единият комунистически девствен,другият яко яхнал асемблерните розови понита - saruman
...
Рано или късно усерите на Виндофс разбират че стоят от неправилната страна на хуя. - ici
PM
Top
Lachezar
  Публикувано на: 17-05-2017, 11:04
Quote Post



Име: Лъчезар Добрев
Група: Потребител
Ранг: Почетен член

Мнения: 2603
Регистриран на: 10.11.04



QUOTE (Pascal @ 16-05-2017, 15:30)
QUOTE (Lachezar @ 16-05-2017, 11:57)
@Pascal: Всъщност можеш да направиш засечка: един итератор отпред-назад, и втори итератор отзад-напред, като първия въртиш от началото до края, а втория от края до текущия елемент на първия итератор:...

Аз мисля, че FidelDahan точно това имаше предвид тук...

QUOTE (FidelDahan @ 15-05-2017, 11:28)

Един тук предлага алтернатива с 2 итератора, които обаче обхождат от краищата и се срещат по средата. Може би това е по-добро, защото не се усложнява кода със собствени итераторски типове.
http://stackoverflow.com/questions/7758202...terator-in-java

Опа, прав си!
В моя защита ще кажа, че като видя връзка към stack* или *exchange и пропускам по-нататък.


--------------------
И'м ватцхинг ъоу...
PMUsers Website
Top
FidelDahan
Публикувано на: 17-05-2017, 20:57
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2092
Регистриран на: 12.06.08



Наскоро и аз проучвах ArrayList vs LinkedList. До колкото разбрах, ArrayList има няколко предимства пред LinkedList (random access, по-добра бързина на достъп, по-малко допълнителна памет). Обаче LinkedList изглежда, че бие когато става въпрос за големи списъци и големи heap-ове. С нарастване на големината скалира плавно и най-вече без задавяния на GC. Също така не му се налага да пренарежда евентуално фрагментиран хийп, за да намери място в паметта, където ще се събере капацитета на целия масив.

Това мнение ми се струва много солидно, въпреки че има много по-малко точки от фаворитния отговор с над 2000 точки.

QUOTE
As someone who has been doing operational performance engineering on very large scale SOA web services for about a decade, I would prefer the behavior of LinkedList over ArrayList. While the steady-state throughput of LinkedList is worse and therefore might lead to buying more hardware -- the behavior of ArrayList under pressure could lead to apps in a cluster expanding their arrays in near synchronicity and for large array sizes could lead to lack of responsiveness in the app and an outage, while under pressure, which is catastrophic behavior.

Similarly, you can get better throughput in an app from the default throughput tenured garbage collector, but once you get java apps with 10GB heaps you can wind up locking up the app for 25 seconds during a Full GCs which causes timeouts and failures in SOA apps and blows your SLAs if it occurs too often. Even though the CMS collector takes more resources and does not achieve the same raw throughput, it is a much better choice because it has more predictable and smaller latency.

ArrayList is only a better choice for performance if all you mean by performance is throughput and you can ignore latency. In my experience at my job I cannot ignore worst-case latency.
PMEmail Poster
Top
thrawn
Публикувано на: 18-05-2017, 07:39
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 492
Регистриран на: 17.01.17



Определено масив и списък решават различни проблеми.

Тук обаче има задача която се решава най-чисто с масив. А данните са в списък... Вариантите общо взето са 3:
1. Търсиш решение със списък.
2. Прехвърляш данните от списъкът в масив.
3. Ползваш локален (tmp) масив в който наливаш данните.

Първия вариант е интересен като упражнение, видно от темата, но освен с учебна цел няма логика да се ползва.
Втория вариант може да е удачен, а може и да не е (заради проблемите с препълването на масивът и съпътстващите преоразмерявания в имплементацията на ArrayList).
Затова, за мен, най-чист е вариант три (при положение, че не знаем дали изборът на списък е обоснован). Прави се tmp масив в които се налива целия лист.
PMEmail Poster
Top
Pascal
Публикувано на: 21-05-2017, 20:49
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 679
Регистриран на: 22.11.06



QUOTE (thrawn @ 18-05-2017, 07:39)
Тук обаче има задача която се решава най-чисто с масив. А данните са в списък.

Каква задача, какви пет лева? Аз не пиша курсова работа. Интересуваше ме има ли разумен начин да се обходят всички двойки елементи в Java LinkedList. Не ме интересуват масиви, не ме интересуват други езици. Алгоритмично решението е елементарно.

Отговорът на питането е, че и тази операция на сливиците трябва да се прави през ректума.
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (3) 1 2 [3]  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0