Різниця між ArrayDeque та PriorityQueue ?

Основи мови Java

Говорячи коротко, там не те, щоб різниця. А просто спільного майже немає. ;-)

ArrayDeque - одна з реалізацій двосторонньої (точніший переклад "двокінцевої") черги, структури в якій елементи розташовані лінійно і пов'язані кожен з двома сусідами в обидві сторони. Тобто. її можна пройти з обох кінців, дістати будь-який елемент за O(n), а перший або останній вставити або видалити за О(1)

PriorityQueue - структура (часто, на основі дерева, розташованого в масиві), яка дозволяє додавати елементи за O(log(n)) і вилучати їх з урахуванням привласнених елементів (додавання) пріоритетів за O(log(n)).

"Така ж різниця, як між кореспондентом та член-кореспондентом" (с) класик

Говорячи коротко, там не те, щоб різниця. А просто спільного майже немає. ;-)

ArrayDeque - одна з реалізацій двосторонньої (точніший переклад "двокінцевої") черги, структури в якій елементи розташовані лінійно і пов'язані кожен з двома сусідами в обидві сторони. Тобто. її можна пройти з обох кінців, дістати будь-який елемент за O(n), а перший або останній вставити або видалити за О(1)

PriorityQueue - структура (часто, на основі дерева, розташованого в масиві), яка дозволяє додавати елементи за O(log(n)) і вилучати їх з урахуванням привласнених елементів (додавання) пріоритетів за O(log(n)).

"Така ж різниця, як між кореспондентом та член-кореспондентом" (с) класик

1) ArrayDeque Тобто. це просто двонаправлений список. А до чого тоді приставка Array у назві?

2) PriorityQueue Що за пріоритети? За яким хоча б приблизно принципом JVM визначає який пріоритет пріоритет поточному елементу при додаванні?

PS: Документацію читав.

1) Приставка Arrayвідноситься до способу внутрішнього подання двонаправленого списку. ArrayDeque і LinkedList, наприклад, обидва реалізують інтерфейс Deque (двонаправлений список), але при цьому ArrayDeque (як і ArrayList) дозволяє мати доступ до центральних елементів списку за O(1), у той час як у LinkedList це відбувається за O( n), з іншого боку, доступ до кінцевих елементів у них обох відбувається за O(1), але при цьому у LinkedList, тимчасова константа природно менша.

У документації це пояснюється Java 2 SE API reference, у вступі до сторінок Deque, ArrayDeque і LinkedList - туди ви можете звернутися якщо я недостатньо чітко/докладно виклав.

2) Це пріоритети елементів, що призначаються користувачем для кожного елемента, що міститься в такій структурі. Пріоритети призначаються не прямо, а за допомогою компаратора. Наприклад, якщо ви запихаєте в структуру відомості про чиновників держдепартаменту, ви можете як пріоритет використовувати величину, зворотну до їхньої зарплати. Тоді при спробі діставати звідти чиновників, вони з'являтимуться з найбільш оплачуваних. Якщо ж пхати туди класи типу String або Integer, то вони вже й так є компаратори - рядки виходитимуть в алфавітному порядку, а числа починаючи з найменшого. Як вже сказано, додавання, пошук та видалення елемента відбуваються приблизно за O(log(n)) що робить цю структуру іноді найбільш зручною для різних сортувань.