3986

Знайомство з динамічними масивами

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторна робота №6 (Знайомство з динамічними масивами) Тема роботи: Знайомство з динамічними масивами. Мета роботи: Навчитися писати програми з використанням динамічних масивів. План роботи. Ознайомитися з інтерфейсами та їх влас...

Украинкский

2012-11-10

273.57 KB

14 чел.

6.

Лабораторна робота №6 (Знайомство з динамічними масивами)

Тема роботи: Знайомство з динамічними масивами.

Мета роботи: Навчитися писати програми з використанням динамічних масивів.

План роботи

1.

2.

3.

4.

5.

Ознайомитися з інтерфейсами та їх властивостями: Collection, List, Set.

Ознайомитися з класами: ArrayList, HeshSet, TreeSet.

Модифікувати програми для класів ArrayList, HeshSet, TreeSet згідно свого варіанту

Ознайомлення з колекціями класів, визначених програмістом.

Доробити програму з колекціями класів, визначених програмістом.

Теоретичні відомості

В Java 2 було запропоновано одне із найбільш цікавих доповнень – колекції. Структура

колекцій стандартизує спосіб, з допомогою якого ваші програми обробляють групи об’єктів. В

попередніх версіях Java для збереження і маніпулювання даними служили класи Dictionary,

Vector, Stack і Properties. Хоча ці класи були досить корисними, відчувалась нестача

уніфікованого, централізованого підходу при роботі з групами об’єктів. Наприклад, спосіб

використання класу Vector відрізнявся від використання класу Properties.

Інтерфейси колекцій

Нагадаємо, інтерфейс – це набір функцій, котрі повинні бути реалізовані (визначені) в класі.

Інтерфейс Collection.

Інтерфейс Collection – основа, на якій формується структура колекцій. В ньому

оголошуються методи, котрі визначаються всіма колекціями.

Основні методи колекцій:

boolean add(Object obj)

Додає obj до колекції. Повертає true, якщо obj був доданий до

колекції, і false якщо obj уже був доданий до колекції і якщо

колекція не допускає дублікатів

void clear()

Видаляє всі елементи із колекції

boolean contains(Object obj)

Повертає true, якщо колекція містить obj, false – якщо ні

Iterator iterator()

Повертає ітератор (iterator) для колекції

boolean remove(Object obj)

Видаляє один екземпляр obj із колекції. Повертає true якщо

елемент був видалений і false - якщо ні

int size()

Повертає кількість елементів, котрі містяться в колекції

Object toArray()

Повертає масив, котрий містить всі елементи колекції

Об’єкти додаються в колекцію з допомогою методу add(). Зверніть увагу, що add() отримує

аргумент типу Object. Оскільки Object – суперклас для всіх класів, в колекції можна зберігати

об’єкт будь-якого типу. Однак, примітивні типи зберігати не можна.

Для видалення об’єктів служить метод remove().

58


Інтерфейс List.

Цей інтерфейс доповнює Collection і визначає поведінку колекції, котра зберігає

послідовність елементів. Елементи можуть бути вставлені або отримані із колекції з допомогою

їх позиції в списку, котра відраховується від нуля.

Методи інтерфейсу List.

void add(int index, Object obj)

Object get(int index)

int indexOf(Object obj)

Object remove(int index)

Object set(int index)

Вставляє obj в колекцію в позицію з індексом

index. Будь-які елементи, котрі існували раніше в

точці вставки або вище неї будуть зсунуті (тобто

елементи не перезаписуються поверх існуючих)

Повертає об’єкт, котрий зберігається в позиції

index

Повертає індекс першого екземпляру obj.

Якщо obj не знайдено – повертається -1

Видаляє елемент із позиції index. В результаті

список ущільнюється (тобто, індекси наступних

елементів зменшуються на 1)

Встановлює об’єкт obj в позиції під номером

index

Інтерфейс Set.

Цей інтерфейс повторює інтерфейс Collection і оголошує поведінку колекції, котра не

допускає дублювання елементів. Тому метод add() повертає false, якщо здійснюється спроба

додати в набір дублюючі елементи.

Класи колекцій

Це класи – котрі реалізують вищезгадані інтерфейси, тобто реалізовують всі методи.

Клас ArrayList.

Цей клас реалізує інтерфейс List. ArrayList підтримує динамічні масиви, котрі можуть рости

по мірі необхідності. В Java стандартні масиви мають фіксовану довжину. Після того, як масиви

створені, вони не можуть розширюватись або зменшуватись, це означає, що ви наперед повинні

знати, скільки елементів буде знаходитись у масиві. Але, інколи, ви не можете до моменту

виконання точного розміру масиву. Саме для цього і служить клас ArrayList.

Приклад 1.

import java.util.ArrayList;

public class Lab2

{

public static void main(String[] args)

{

//створюємо динамічний масив

ArrayList al = new ArrayList();

System.out.println("Starting size of al: "+al.size());

//додаємо елементи в масив

59


al.add("C");

al.add("A");

al.add("B");

al.add("D");

al.add("C");

al.add("F");

al.add(1,"A2");

System.out.println("Size of al after add : "+al.size());

//показати на екрані список масиву

System.out.println("al consists of : "+al);

//видалити елементи із списку

al.remove("F");

al.remove(2);

System.out.println("Size of al after removing : "+al.size());

//показати на екрані список масиву

System.out.println("al consists of after removing : "+al);

}

}

Клас HashSet.

Цей клас реалізує інтерфейс Set. Він створює колекцію, котра використовує хеш-таблицю

для збереження колекції. Перевага використання такої таблиці в тому, що для великих масивів

зберігається постійним час виконання основних операцій, таких, як add(), remove(), size().

Важливо відмітити, що такий клас не гарантує впорядковування елементів.

Приклад 2.

import java.util.HashSet;

public class Lab2

{

public static void main(String[] args)

{

//створюємо динамічний масив

HashSet hs = new HashSet();

//додаємо елементи в масив

hs.add("C");

hs.add("A");

hs.add("B");

hs.add("D");

hs.add("C");

hs.add("F");

//показати на екрані список масиву

System.out.println("hs consists of : "+hs);

}

}

60


Клас TreeSet.

Цей клас теж реалізує інтерфейс Set, але на відміну від класу HasSet, об’єкти в ньому

зберігаються в відсортованому вигляді.

Приклад 3.

import java.util.TreeSet;

public class Lab2

{

public static void main(String[] args)

{

//створюємо динамічний масив

TreeSet ts = new TreeSet();

//додаємо елементи в масив

ts.add("C");

ts.add("A");

ts.add("B");

ts.add("D");

ts.add("C");

ts.add("F");

//показати на екрані список масиву

System.out.println("ts consists of : "+ts);

}

}

Колекції класів, визначених програмістом.

Для простоти в попередніх прикладах ми зберігали у колекціях вбудовані об’єкти типу

String. Однак, колекції не обмежуються збереженням простих типів. Потужність колекцій якраз в

тому і полягає, щоб зберігати будь-який тип об’єкта, в тому числі і створеного вами.

Приклад 4.

import java.util.*;

public class Lab2

{

public static void main(String[] args)

{

//створюємо динамічний масив

HashSet hs = new HashSet();

//додаємо елементи в масив

hs.add(new Address("Antoniv", "23/16 Naukova Str., Lviv"));

hs.add(new Address("Kozak", "12 Konovaltsa Str., Lviv"));

hs.add(new Address("Hrabovskyy", "21 Shevchenka Str., Lviv"));

hs.add(new Address("Hrabovskyy", "21 Chereshneva Str., Lviv"));

//показати на екрані список масиву

Iterator iterator = hs.iterator();

while(iterator.hasNext())

{

System.out.println(iterator.next()+"\n");

}

}

static class Address

{

private String name;

61


private String address;

public Address(String name, String address)

{

this.name = name;

this.address = address;

}

public int hashCode()

{

return name.hashCode();

}

public String toString()

{

return name+"\n"+address;

}

}

}

Зверніть увагу, що в визначеному нами класі Address задається метод hashCode(), котрий

повертає тип int. Цей метод повинен повертати унікальне значення для кожного об’єкту. При

цьому, якщо значення hashCode() співпадають, то об’єкти вважаються однаковими. Саме

звертаючись до цього методу клас HashSet визначає, чи такий об’єкт уже існує в наборі.

Порядок виконання роботи

1.

Виконайте всі наведені приклади.

2.

До масиву ArrayList() добавити об'єкти A, C, D, R, T та пояснити результат( в низу

програми в коментарях.

3.

До масиву HashSet() добавити об'єкти A, C, D, R, T та пояснити результат( в низу

програми в коментарях.

4.

До масиву TreeSet() добавити об'єкти A, C, D, R, T та пояснити результат( в низу

програми в коментарях.

5.

Поясніть чому в прикладі 4 об’єкт new Address("Hrabovskyy", "21 Chereshneva Str.,

Lviv") не буде доданий до набору.

6.

Видрукуйте всі елементи на екрані, користуючись методами size(), get(index) з

допомогою циклу for.

7. Зробіть висновки. Оформити звіт. У звіті повинно бути текст програми і скріншоти результатів.

8. Прикріпити до VNS файл [Ваша Фамілія].zip в архіві повинно бути файли програм [Ваша

Фамілія]_labN_k.class ,a також файли звіту [Ваша Фамілія]_Zvit_LabN.mdb, де N – номер

лабораторної роботи, k – номер програми.

Контрольні питання

1. Який клас дозволяє дублювання елементів в колекції?

2. Який клас створює колекцію, котра використовує хеш-таблицю для збереження колекції.

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

виконання основних операцій, таких, як add(), remove(), size().

3. Скільки об'єктів можна створити з одного класу?

4. Чи можна добавити об'єкт у масив ArrayList у визначену позицію?

5. Який масив впорядковує елементи колекції?

6. Які методи інтерфейс Collection успадковує від інтерфейсу List, а які перевизначає?

62



 

А также другие работы, которые могут Вас заинтересовать

4203. НЛП та управління колективом 169.5 KB
  Вступ Актуальність теми. Темою даної курсової роботи є застосування в управлінській діяльності нейролінгвістичного програмування. Розроблене в середині минулого сторіччя, НЛП зараз є однією із найактуальніших методик психотерапії та психологічного в...
4204. Структура таблицы и основные типы данных. Абсолютная и относительные ссылки 91.12 KB
  Структура таблицы и основные типы данных. Абсолютная и относительные ссылки. Цель: рассмотреть основные параметры рабочего листа вводить текстовые,числовые данные и формулы в таблицу редактировать и форматировать данные...
4205. Дослідження вхідних і вихідних характеристик транзисторів 179 KB
  Дослідження вхідних і вихідних характеристик транзисторів Мета роботи: отримання експериментальним шляхом вхідних і вихідних характеристик транзисторів, отримання навичок роботи з довідковою літературою. Схема дослідження характеристик тр...
4206. Условная функция. Использование диапазона клеток с применением статических функций 162.52 KB
  Условная функция Цель: Научится: Пользоваться диапазоном клеток и стандартными статическими функциями. Использовать логические функции. Создавать сложные формулы. Работать с несколькими листами. Составлять логические выражения. Ход работы Используя...
4207. Електробезпека. Основні причини та особливості електротравм 226.5 KB
  Електробезпека. Основні причини та особливості електротравм. Електробезпека — система організаційних і технічних заходів та засобів, що забезпечують захист людей від шкідливої і небезпечної дії електричного струму, електричної дуги, електричног...
4208. Надання першої допомоги при ураженні електричним струмом 160 KB
  Надання першої допомоги при ураженні електричним струмом Людина, яка надає першу долікарську допомогу, повинна знати: характерні ознаки порушення функцій організму потерпілого загальні принципи надання першої долікарської допомоги при отриманих ушк...
4210. ФСП НТУУ КПІ з позиції концепції управління за цілями 276.5 KB
  Вступ Метою даної роботи є аналіз діяльності ФСП НТУУ КПІ з позиції концепції управління за цілями. Спираючись на мету, я виділила наступні завдання для вирішення у даній роботі: --встановити основні положення концепції управління за цілями, її ет...
4211. Логотипи, бренди та слогани на сучасному ринку 1018 KB
  Мифы и легенды брендов Мифы и легенды давно стали условием успешности бренда на рынке. Продукт, о котором невозможно рассказать историю, брендом не является. Известные бренды окутаны мифами и легендами половина из которых это реальные факты из ис...