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



 

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

82955. Проектирование системы теплоснабжения района города Томск 148.14 KB
  Определить расчетные расходы теплоты на отопление, вентиляцию и горячее водоснабжение района города по укрупненным показателям в зависимости от расчетной температуры наружного воздуха, этажности и нормы расхода теплоты на горячее водоснабжение на одного человека в сутки с учетом общественных...
82956. Банковская система Японии 35.47 KB
  Возникновение первых банков в Японии относится к XVII в., что было обусловлено необходимостью обслуживания банковским капиталом развивающейся торговли, промышленности и сельского хозяйства. В 1617 году в Осака впервые были выпущены бумажные деньги, обеспеченные серебром, и образована Ассоциация банкиров...
82957. Сравнительная характеристика сайтов для просмотра фильмов онлайн 84.98 KB
  На просторах всемирной паутины, если хорошо поискать, то можно найти много интересного. Одним из лакомых кусочков для киноманов является просмотр фильмов онлайн. Конечно, можно скачать новинки мирового кино, применяя скачивание с различных торрентов, но сейчас выпускается так много фильмов...
82958. Построение систем искусственного интеллекта 43.28 KB
  В качестве самостоятельного научного направления искусственный интеллект (ИИ) существует уже более четверти века. Мнение общества, относительно специалистов данной области, постепенно менялось от скепсиса до уважения, и понимания перспектив данной области в будущем.
82959. Демографическая ситуация в России и Удмуртии 37.12 KB
  Изменение населения совершается и путём перехода людей из одного состояния в другое по мере изменения их возраста семейного положения числа детей демографическая мобильность или уровня образования профессии социального положения социальная мобильность.
82960. Этикет стран мира 67.37 KB
  Следует уважать национальные традиции в еде праздники религию и руководство страны в которой Вы находитесь. Следует всегда быть пунктуальным учитывать движение на дорогах и скопление людей на улицах. В любой стране очень важны титулы поэтому ими следует пользоваться.
82961. Германская модель социальной рыночной экономики 43.98 KB
  Предпосылки возникновения в Германии Современная германская экономика Правовые основы. Социальный порядок преследует определенные цели в современной западной экономике в том числе и экономике Германии основными можно определить следующие цели социального порядка: Развитие и совершенствование...
82962. Діяльність Симиренків 319.49 KB
  Родоначальником знатного сімейства був Степан Симиренко який понад 20 років козакував на Січі а потім оселився на одному хуторі біля Черкас і почав господарювати. Один з його синів Федір Симиренко став кріпаком але виявив себе справжнім нащадком батькакозака.
82963. Различные виды автомобильных топлив. Сравнение их преимуществ и недостатков 58.5 KB
  Наиболее распространены в природе и добываются промышленным способом такие виды топлива как нефть и нефтепродукты керосин бензин мазут дизельное топливо уголь природный горючий газ древесина С момента появления первых двигателей внутреннего сгорания и до настоящего времени основными видами топлива...