lec 3
DESCRIPTION
Общее описание класса Object и коллекции АrrayListTRANSCRIPT
![Page 2: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/2.jpg)
Класс Object
java.lang.Object
public class Object
Конструктор:
Object() Object - корень иерархии классов. Каждый класс имеет Object как суперкласс. Все объекты, включая массивы, реализуют
методы этого класса.
![Page 3: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/3.jpg)
Методы класса Object
protected Object clone() // Создает и возвращает копию этого объекта
protected void finalize() // Вызывается сборщиком
мусора когда нет больше ссылок на объект
Class getClass() // Возвращает класс во время
выполнения
int hashCode() // Возвращает hash код для объекта
void notify() // Возобновляет единичный поток,
который ожидает на объектном мониторе
![Page 4: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/4.jpg)
Методы класса 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](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/5.jpg)
Метод 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](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/6.jpg)
Метод equals()
Эквивалентным называется отношение, которое является симметричным, транзитивным и рефлексивным.
![Page 7: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/7.jpg)
Метод 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](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/8.jpg)
Метод 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](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/9.jpg)
equals() класса Integer
public boolean equals(Object obj) {
if (obj instanceof Integer) {return value == ((Integer)obj).intValue();
}
return false;
}
![Page 10: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/10.jpg)
hashCode() класса Integer
public int hashCode() {
return value;
}
![Page 11: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/11.jpg)
Метод 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](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/12.jpg)
Классы-коллекции
![Page 13: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/13.jpg)
ArrayList
● Реализует интерфейс List. ● Может менять свой размер во время
исполнения программы.● Элементы могут быть абсолютно любых
типов в том числе и null.
![Page 14: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/14.jpg)
ArrayList(Создание коллекции)
ArrayList<String> list = new ArrayList<String>();
![Page 15: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/15.jpg)
ArrayList(Добавление элементов)
list.add("0");
Внутри метода add(value) происходят следующие вещи:
1) проверяется, достаточно ли места в массиве для вставки нового элемента;
ensureCapacity(size + 1);
2) добавляется элемент в конец (согласно значению size) массива.
elementData[size++] = element;
![Page 16: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/16.jpg)
ArrayList(Добавление элементов)
list.add("10");
При добавлении 11-го элемента, проверка показывает, что места в массиве нет. Соответственно создается новый массив и вызывается System.arraycopy().
![Page 17: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/17.jpg)
ArrayList(Добавление элементов)
list.add(5, "100");
1. Проверяется, достаточно ли места в массиве для вставки нового элемента.
2. Подготавливается место для нового элемента с помощью System.arraycopy();
3. Перезаписывается значение у элемента с указанным индексом.
![Page 18: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/18.jpg)
ArrayList(Удаление элемента)
●по индексу remove(index)●по значению remove(value)
list.remove(5);
1.Определяется какое количество элементов надо
скопировать
2.Копирутся элементы используя System.arraycopy()
3.Уменьшается размер массива и «забывается» про
последний элемент
![Page 19: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/19.jpg)
ArrayList(Итог)
● Быстрый доступ к элементам по индексу за время O(1);
● Доступ к элементам по значению за линейное время
O(n);
● Медленный, когда вставляются и удаляются элементы из
«середины» списка;
● Позволяет хранить любые значения в том числе и null;
● Не синхронизирован.
![Page 20: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/20.jpg)
Домашнее задание
1.Реализовать методы equals() и hashCode(), для объектов из предыдущего задания.
2.Реализовать стек LIFO на основе массива.
![Page 21: Lec 3](https://reader034.vdocument.in/reader034/viewer/2022050907/557ed8dad8b42a57098b47b1/html5/thumbnails/21.jpg)
Литература
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/