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



Александр Русин
e-mail: alexander.rusin@gmail.com
Android Developer
Класс 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/

Lec 3

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