Top Banner
Курс в Java/Android Занятие 3 Александр Русин e-mail: [email protected] Android Developer
21

Lec 3

Jun 15, 2015

Download

Documents

Alexander Rusin

Общее описание класса Object и коллекции АrrayList
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Lec 3

Курс в Java/AndroidЗанятие 3

Александр Русин e-mail: [email protected]

Android Developer

Page 2: Lec 3

Класс Object

java.lang.Object

public class Object

Конструктор:

Object() Object - корень иерархии классов. Каждый класс имеет Object как суперкласс. Все объекты, включая массивы, реализуют

методы этого класса.

Page 3: Lec 3

Методы класса Object

protected Object clone() // Создает и возвращает копию этого объекта

protected void finalize() // Вызывается сборщиком

мусора когда нет больше ссылок на объект

Class getClass() // Возвращает класс во время

выполнения

int hashCode() // Возвращает hash код для объекта

void notify() // Возобновляет единичный поток,

который ожидает на объектном мониторе

Page 4: Lec 3

Методы класса Object void notifyAll() // Возобновляет все потоки, которые ожидают на

объектном мониторе

String toString() // Возвращает строковое представление объекта

void wait() // Остановка текущего потока пока другой поток не

вызовет notify() или notifyAll метод для этого объекта

void wait(long timeout) // Остановка текущего потока на время или

пока другой поток не вызовет notify() или notifyAll метод для этого

объекта

void wait(long timeout, int nanos) // Остановка текущего потока на

время или пока другой поток не вызовет notify() или notifyAll метод

для этого объекта

Page 5: Lec 3

Метод equals()

Сравнивает два объекта и возвращает истину, если они равны

Integer one = new Integer(1);

Integer anotherOne = new Integer(1);

if (one.equals(anotherOne)) {

System.out.println( objects are equal );

}

Page 6: Lec 3

Метод equals()

Эквивалентным называется отношение, которое является симметричным, транзитивным и рефлексивным.

Page 7: Lec 3

Метод equals()

Рефлексивность: для любого ненулевого x, x.equals(x) вернет true;

Транзитивность: для любого ненулевого x, y и z, если x.equals(y) и y.equals(z) вернет true, тогда и x.equals(z) вернет true;

Симметричность: для любого ненулевого x и y, x.equals(y) должно вернуть true, тогда и только тогда, когда y.equals(x) вернет true.

Page 8: Lec 3

Метод equals()

Integer a = new Integer(6);

Integer b = new Integer(6);

System.out.println(a == b); // false т.к. это разные объекты с разными ссылками

System.out.println(a.equals(b)); // true, здесь уже задействована логика сравнения

Page 9: Lec 3

equals() класса Integer

public boolean equals(Object obj) {

if (obj instanceof Integer) {return value == ((Integer)obj).intValue();

}

return false;

}

Page 10: Lec 3

hashCode() класса Integer

public int hashCode() {

return value;

}

Page 11: Lec 3

Метод hashCode()

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + (int) (id_client ^ (id_client >>> 32));

result = prime * result + ((name == null) ? 0 : name.hashCode());

result = prime * result + ((address == null) ? 0 : address.hashCode());

result = prime * result + (int) (group_id ^ (group_id >>> 32));

result = prime * result + status.hashCode();

return result;

}

Page 12: Lec 3

Классы-коллекции

Page 13: Lec 3

ArrayList

● Реализует интерфейс List. ● Может менять свой размер во время

исполнения программы.● Элементы могут быть абсолютно любых

типов в том числе и null.

Page 14: Lec 3

ArrayList(Создание коллекции)

ArrayList<String> list = new ArrayList<String>();

Page 15: Lec 3

ArrayList(Добавление элементов)

list.add("0");

Внутри метода add(value) происходят следующие вещи:

1) проверяется, достаточно ли места в массиве для вставки нового элемента;

ensureCapacity(size + 1);

2) добавляется элемент в конец (согласно значению size) массива.

elementData[size++] = element;

Page 16: Lec 3

ArrayList(Добавление элементов)

list.add("10");

При добавлении 11-го элемента, проверка показывает, что места в массиве нет. Соответственно создается новый массив и вызывается System.arraycopy().

Page 17: Lec 3

ArrayList(Добавление элементов)

list.add(5, "100");

1. Проверяется, достаточно ли места в массиве для вставки нового элемента.

2. Подготавливается место для нового элемента с помощью System.arraycopy();

3. Перезаписывается значение у элемента с указанным индексом.

Page 18: Lec 3

ArrayList(Удаление элемента)

●по индексу remove(index)●по значению remove(value)

list.remove(5);

1.Определяется какое количество элементов надо

скопировать

2.Копирутся элементы используя System.arraycopy()

3.Уменьшается размер массива и «забывается» про

последний элемент

Page 19: Lec 3

ArrayList(Итог)

● Быстрый доступ к элементам по индексу за время O(1);

● Доступ к элементам по значению за линейное время

O(n);

● Медленный, когда вставляются и удаляются элементы из

«середины» списка;

● Позволяет хранить любые значения в том числе и null;

● Не синхронизирован.

Page 20: Lec 3

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

1.Реализовать методы equals() и hashCode(), для объектов из предыдущего задания.

2.Реализовать стек LIFO на основе массива.

Page 21: Lec 3

Литература

1. http://dr-magic.blogspot.com/2009/01/java-se-1.html

2. http://ru.wikipedia.org/wiki/Java

3. http://neerc.secna.ru/Algor/algo_base_ds_lists.html

4. http://habrahabr.ru/post/128269/