Типи реалізації колекцій – JAVA ДЛЯ ANDROID

&nbsp

Перераховані вище інтерфейси допускають декілька варіантів реалізації, кожен з яких застосуємо в специфічних випадках Серед найбільш поширених реалізацій інтерфейсів можна назвати наступні

ArrayList – список на основі масиву У ньому швидко відбувається індексація, але повільно змінюється розмір

LinkedList – список, який може швидко змінювати розмір, але повільніше індексується

HashSet – набір, який реалізується у вигляді хешу, add, remove, contains і size виконуються за постійний час, тобто для їх роботи потрібен добре організований хеш HashSet може містити nul 1 (не більше одного)

HashMap – реалізація інтерфейсу Map, що використовує в якості індексу хеш-таблицю, add, remove, contains і size виконуються за постійний час, тобто для їх роботи потрібен добре організований хеш HashMap може містити один і тільки один ключ null, в той час як скільки завгодно значень можуть бути nul 1

ТrееМар – упорядкована карта Обєкти в карті відсортовані відповідно до їх природним порядком, якщо вони реалізують інтерфейс Comparable, або відповідно до Comparator, переданим конструктору ТгееМар, якщо інтерфейс Comparable в них не реалізується

Користувачі Java, вже виробили власний стиль, воліють оголошувати типи інтерфейсів, а не типи реалізації, якщо це тільки можливо Це загальне правило, але його буде простіше зрозуміти в контексті фреймворка колекцій

Розглянемо метод, який повертає новий список рядків, який майже не відрізняється від списку рядків, переданого в якості другого параметра, але в якому кожному елементу передує рядок, передана в як перший параметр Код може виглядати так:

Але такий варіант реалізації нам не підійде: він просто буде працювати не з усіма видами списків Він застосовується лише до ArrayList Якщо в якийсь момент знадобиться змінити код, що викликає цей метод, наприклад перейти від використання ArrayList на LinkedList, код просто не зможе використовувати колишній метод Погодьтеся, це абсолютно невиправдано

Більш красива реалізація наведеного вище коду може виглядати так:

Ця версія більш адаптируема, оскільки вона не повязує метод з конкретною реалізацією списку Метод залежить тільки від того факту, що параметр реалізує певний інтерфейс Неважливо, як саме При використанні типу інтерфейсу як параметр ми повідомляємо саме ту інформацію, яка потрібна для виконання завдання, – ні більше ні менше

Насправді код можна було б оптимізувати і далі, якби як параметр і типу повернення ми мали колекцію (Collection)

Джерело: Android Програмування на Java для нового покоління мобільних пристроїв

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*