Файл: Лабораторная работа 4 Коллекции объектов.pptx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 02.12.2023

Просмотров: 52

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Лабораторная работа 4 Коллекции объектов

Коллекции

Коллекции – это контейнеры, в которых можно хранить условно однотипные* объекты. Отличия от массивов:

Основные типы коллекций

Иерархия классов коллекций

Базовый интерфейс Collection

Основные операции:

Iterator

Итератор используется для того, чтобы получить доступ к элементам коллекции. Итератор можно получить из любой коллекции, вызвав у нее метод iterator().

Iterator содержит следующие методы:

boolean hasNext()

E next()

void remove()

Java.util.List

List

ArrayList

ArrayList – это список, реализованный на основе массива.

Преимущества:

Пример ArrayList

ArrayList words = new ArrayList();

words.add(“one”);

words.set(0, “two”);

words.add(0, “three”);

words.remove(1);

// В итоге в списке останется элемент с индексом 0 и значением “three”

LinkedList

LinkedList – это двусвязный список, основанный на работе с объектами и ссылками между ними (каждый объект хранит ссылки на предыдущее и следующее значения).

Преимущества:

Пример LinkedList

сlass Apple {

String mSort;

Apple(String sort) {

mSort = sort;

}

String getSort() {

return mSort;

}

}

// В методе main():

List apples = new LinkedList();

apples.add(new Apple(“Macintosh”));

apples.add(new Apple(“Granny smith”));

apples.add(new Apple(“Antonovka”));

for (Apple a : apples)

System.out.println(“Apple sort – “ + a.getSort());

Пример использования итератора

List list = new ArrayList();

for (int i = 0; i < 5; i++)

list.add("Str "+i);

System.out.println("Before: "+list.toString());

Iterator it = list.iterator();

while(it.hasNext()) {

if (it.next().toString().contains("3"))

it.remove();

}

System.out.println("After: "+list.toString());

Сортировка списков

Список можно отсортировать при помощи метода Collections.sort(), который имеет два перегруженных варианта:

sort(List list)

sort(List list, Comparator super T> c)

Collections.sort(list, new Comparator() {

public int compare(String o1, String o2) {

Integer i1 = Integer.parseInt(o1);

Integer i2 = Integer.parseInt(o2);

return (i1 > i2 ? -1 : (i1 == i2 ? 0 : 1));

}

});

java.util.Set

Set

HashSet и LinkedHashSet

Особенности HashSet:

TreeSet

Особенности:

Удаление дубликатов из коллекции

List animals = new ArrayList();

animals.add("Cat");

animals.add("Dog");

animals.add("Cat");

animals.add("Hamster");

Set tmpSet = new HashSet(animals);

animals = new ArrayList(tmpSet);

System.out.print (animals);

// Output

[Cat, Dog, Hamster]

Сортировка множеств

Отсортировать множество можно двумя способами:

Queue

Основные операции представлены в таблице:

Пример Queue

Queue qc = new LinkedList();

for (char c : "Dinosaurus".toCharArray())

qc.offer(c);

while(qc.peek() != null)

System.out.print(qc.remove()+" ");

// Output: D i n o s a u r u s

java.util.Map

Map

Основные операции, описанные в Map

HashMap и LinkedHashMap

Особенности:

Пример работы с Map

Map vehicles = new HashMap();

vehicles.put("BMW", 250);

vehicles.put("Mercedes", 235);

vehicles.put("Audi", 245);

vehicles.put(“Lada", 170);

vehicles.remove(“Lada“);

System.out.println("Total vehicles: " + vehicles.size());

// Получаем множество ключей и перебираем коллекцию

for (String key : vehicles.keySet())

System.out.println(key + " - " + vehicles.get(key));

System.out.println();

// Ищем элемент с ключем “Audi”

String searchKey = "Audi";

if (vehicles.containsKey(searchKey))

System.out.println(searchKey+" max speed is”+vehicles.get(searchKey)+”km/h");

// Удаляем все элементы

vehicles.clear();

TreeMap

Особенности:

Сортировка карт

Чтобы отсортировать карту по ключам*, необходимо:

Методы обхода ассоциативного массива

Map map = new HashMap();

1) for (A key : map.keySet()) { … }

2) for (B value : map.values()) { … }

3) for (Map.Entry entry : map.entrySet()) {

entry.getKey();

entry.getValue();

}

Сравнение коллекций

Для сравнения используется метод equals(Object o):

Пример создания составных коллекций

// Список

List arrayList = new ArrayList();

// Карта, в которой ключом является объект String, а значением - список

Map> innerMap = new HashMap>();

// Список, элементами которого являются карты, в которых ключом являются

// объекты типа String, а значением – список

List>> listOfMaps =

new ArrayList>>();

arraylist.add("Text");

innerMap.put("key", arraylist);

listOfMaps.add(innerMap);

// Извлекаем…

String text = listOfMaps.get(0).get("key").get(0);

System.out.println("Таки извлекли: "+ text);

Параметризованные классы (Generics)

class GenericClass {

private T item;

T getItem() {

return item;

}

void setItem(T item) {

this.item = item;

}

}

// Создаем экземпляр класса

GenericClass gc = new GenericClass();

gc.setItem("Some string"); // T -> String

System.out.println(gc.getItem()); //Output: Some string

gc.setItem(42); // T -> Integer

System.out.println(gc.getItem()); //Ouput: 42

Параметризованные методы

static void fromArrayToCollection(T[] a, Collection c) {

for (T element : a) c.add(element);

}

// Вызываем метод fromArrayToCollection()

String[] strArr = new String[10];

Collection objColl = new ArrayList();

fromArrayToCollection(strArr, objColl); // T -> String

Integer[] intArr = new Integer[10];

Double[] doubleArr = new Double[10];

Collection numColl = new ArrayList();

fromArrayToCollection(intArr, numColl); // T -> Integer

fromArrayToCollection(doubleArr, numColl); // T -> Double

Еще один пример с параметризованными типами

class Parent {

}

class Child extends Parent {

}

Listlist = new ArrayList(); // Ошибка!

List extends Parent> list = new ArrayList(); //ОК

Задания

Методы обхода ассоциативного массива

Map map = new HashMap();

1) for (A key : map.keySet()) { … }

2) for (B value : map.values()) { … }

3) for (Map.Entry entry : map.entrySet()) {

entry.getKey();

entry.getValue();

}

Сравнение коллекций

Для сравнения используется метод equals(Object o):

  • Списки равны, если содержат равные элементы в одинаковом порядке
  • Множества равны, если содержат одинаковые элементы
  • Карты (ассоциативные массивы) равны, если содержат одинаковые пары «ключ-значение»
  • List firstList = new ArrayList();

    // add elements...

    List secondList = new ArrayList();

    // add elements...

    if (firstList.equals(secondList))

    System.out.println("Collections are equal!");

Пример создания составных коллекций

// Список

List arrayList = new ArrayList();

// Карта, в которой ключом является объект String, а значением - список

Map> innerMap = new HashMap>();

// Список, элементами которого являются карты, в которых ключом являются

// объекты типа String, а значением – список

List>> listOfMaps =

new ArrayList>>();

arraylist.add("Text");

innerMap.put("key", arraylist);

listOfMaps.add(innerMap);

// Извлекаем…

String text = listOfMaps.get(0).get("key").get(0);

System.out.println("Таки извлекли: "+ text);

Параметризованные классы (Generics)

class GenericClass {

private T item;

T getItem() {

return item;

}

void setItem(T item) {

this.item = item;

}

}

// Создаем экземпляр класса

GenericClass gc = new GenericClass();

gc.setItem("Some string"); // T -> String

System.out.println(gc.getItem()); //Output: Some string

gc.setItem(42); // T -> Integer

System.out.println(gc.getItem()); //Ouput: 42

Параметризованные методы

static void fromArrayToCollection(T[] a, Collection c) {

for (T element : a) c.add(element);

}

// Вызываем метод fromArrayToCollection()

String[] strArr = new String[10];

Collection objColl = new ArrayList();

fromArrayToCollection(strArr, objColl); // T -> String

Integer[] intArr = new Integer[10];

Double[] doubleArr = new Double[10];

Collection numColl = new ArrayList();


fromArrayToCollection(intArr, numColl); // T -> Integer

fromArrayToCollection(doubleArr, numColl); // T -> Double

Еще один пример с параметризованными типами

class Parent {

}

class Child extends Parent {

}

List
list = new ArrayList(); // Ошибка!

List extends Parent> list = new ArrayList(); //ОК


Сделать задания 4, 5

Задания

1. Создайте класс Student, содержащий закрытые поля name, age, averageScore, конструктор, который инициализирует эти поля и get- методы для получения значений этих полей. В методе main() создайте список List с типом в цикле (y/n) введите с клавиатуры параметры для 3-4 студентов и добавьте их в коллекцию. После этого нужно выбрать студента с самым высоким средним баллом и вывести полную информацию о нем на экран. 2. Задана строка “Java is a programming language that is concurrent, class-based and object-oriented.”. Разбить ее на слова, убрать знаки препинания. Создать множество, состоящее из этих слов. Удалить все слова, длина которых три символа и меньше (чтобы не возникало ошибок, следует использовать итератор). Вывести получившиеся слова в отсортированном виде. 3. Создать очередь Queue типа Character, записать в нее несколько случайных символов, затем вытащить их из очереди и вывести на экран. Для создания случайных символов можно приводить случайные числа типа int к переменным типа char при помощи явного приведения типов.

Задания

4. Создать карту Map, содержащую данные любых типов. Вывести все ключи. Вывести все значения. Программа должна предлагать ввести ключ и выводить на экран значение, соответствующее этому ключу, затем наоборот: предлагать ввести значение и выдавать ключ. Если в коллекции нет такого ключа или значения, программа должна выдавать соответствующие уведомления. 5. Создать метод printArray(), который получает массив любого типа (кроме примитивных типов) и выводит на экран каждый элемент. Аналогично создать метод printCollection(). В методе main() создать несколько массивов и коллекций различных типов и вывести на экран их элементы при помощи созданных методов.

Домашнее задание

  • Создать класс Planet, содержащий закрытые поля distanceToSun, mass и diameter, конструктор, который инициализирует эти поля (расстояние до солнца, масса и диаметр) и get- и set-методы для этих полей. Создать карту Map , который будет содержать название планеты и класс с информацией о ней. Добавить в карту несколько планет (в коде, а не с клавиатуры). Программа должна предлагать ввести имя планеты и выдавать информацию о ней. Если такой планеты нет в списке, программа должна выдавать соответствующее сообщение.
  • Сделать то же самое, что и в предыдущей задаче, но информация о планете должна храниться в элементах списка. То есть коллекция должна быть примерно такой: Map>.