Різниця між 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)) що робить цю структуру іноді найбільш зручною для різних сортувань.