Jun 15, 2015
Класс Object
java.lang.Object
public class Object
Конструктор:
Object() Object - корень иерархии классов. Каждый класс имеет Object как суперкласс. Все объекты, включая массивы, реализуют
методы этого класса.
Методы класса Object
protected Object clone() // Создает и возвращает копию этого объекта
protected void finalize() // Вызывается сборщиком
мусора когда нет больше ссылок на объект
Class getClass() // Возвращает класс во время
выполнения
int hashCode() // Возвращает hash код для объекта
void notify() // Возобновляет единичный поток,
который ожидает на объектном мониторе
Методы класса Object void notifyAll() // Возобновляет все потоки, которые ожидают на
объектном мониторе
String toString() // Возвращает строковое представление объекта
void wait() // Остановка текущего потока пока другой поток не
вызовет notify() или notifyAll метод для этого объекта
void wait(long timeout) // Остановка текущего потока на время или
пока другой поток не вызовет notify() или notifyAll метод для этого
объекта
void wait(long timeout, int nanos) // Остановка текущего потока на
время или пока другой поток не вызовет notify() или notifyAll метод
для этого объекта
Метод equals()
Сравнивает два объекта и возвращает истину, если они равны
Integer one = new Integer(1);
Integer anotherOne = new Integer(1);
if (one.equals(anotherOne)) {
System.out.println( objects are equal );
}
Метод equals()
Эквивалентным называется отношение, которое является симметричным, транзитивным и рефлексивным.
Метод 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.
Метод equals()
Integer a = new Integer(6);
Integer b = new Integer(6);
System.out.println(a == b); // false т.к. это разные объекты с разными ссылками
System.out.println(a.equals(b)); // true, здесь уже задействована логика сравнения
equals() класса Integer
public boolean equals(Object obj) {
if (obj instanceof Integer) {return value == ((Integer)obj).intValue();
}
return false;
}
hashCode() класса Integer
public int hashCode() {
return value;
}
Метод 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;
}
Классы-коллекции
ArrayList
● Реализует интерфейс List. ● Может менять свой размер во время
исполнения программы.● Элементы могут быть абсолютно любых
типов в том числе и null.
ArrayList(Создание коллекции)
ArrayList<String> list = new ArrayList<String>();
ArrayList(Добавление элементов)
list.add("0");
Внутри метода add(value) происходят следующие вещи:
1) проверяется, достаточно ли места в массиве для вставки нового элемента;
ensureCapacity(size + 1);
2) добавляется элемент в конец (согласно значению size) массива.
elementData[size++] = element;
ArrayList(Добавление элементов)
list.add("10");
При добавлении 11-го элемента, проверка показывает, что места в массиве нет. Соответственно создается новый массив и вызывается System.arraycopy().
ArrayList(Добавление элементов)
list.add(5, "100");
1. Проверяется, достаточно ли места в массиве для вставки нового элемента.
2. Подготавливается место для нового элемента с помощью System.arraycopy();
3. Перезаписывается значение у элемента с указанным индексом.
ArrayList(Удаление элемента)
●по индексу remove(index)●по значению remove(value)
list.remove(5);
1.Определяется какое количество элементов надо
скопировать
2.Копирутся элементы используя System.arraycopy()
3.Уменьшается размер массива и «забывается» про
последний элемент
ArrayList(Итог)
● Быстрый доступ к элементам по индексу за время O(1);
● Доступ к элементам по значению за линейное время
O(n);
● Медленный, когда вставляются и удаляются элементы из
«середины» списка;
● Позволяет хранить любые значения в том числе и null;
● Не синхронизирован.
Домашнее задание
1.Реализовать методы equals() и hashCode(), для объектов из предыдущего задания.
2.Реализовать стек LIFO на основе массива.
Литература
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/