SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Курс в 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/

Mais conteúdo relacionado

Mais procurados

07 - Java. Элементы функционального программирования в Java
07 - Java. Элементы функционального программирования в Java07 - Java. Элементы функционального программирования в Java
07 - Java. Элементы функционального программирования в JavaRoman Brovko
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collectionsMERA_school
 
ReactiveUI: Rx + MVVM
ReactiveUI: Rx + MVVMReactiveUI: Rx + MVVM
ReactiveUI: Rx + MVVMStas Shusha
 
контейнеры STL
контейнеры STLконтейнеры STL
контейнеры STLmcroitor
 
стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введениеmcroitor
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularitiesmcroitor
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателейDEVTYPE
 
Java осень 2013 лекция 2
Java осень 2013 лекция 2Java осень 2013 лекция 2
Java осень 2013 лекция 2Technopark
 
05 - Java. Collections Framework и Generics
05 - Java. Collections Framework и Generics05 - Java. Collections Framework и Generics
05 - Java. Collections Framework и GenericsRoman Brovko
 
алгоритмы stl
алгоритмы stlалгоритмы stl
алгоритмы stlmcroitor
 
Лекция №5. Линейные структуры данных. Предмет "Структуры и алгоритмы обработк...
Лекция №5. Линейные структуры данных. Предмет "Структуры и алгоритмы обработк...Лекция №5. Линейные структуры данных. Предмет "Структуры и алгоритмы обработк...
Лекция №5. Линейные структуры данных. Предмет "Структуры и алгоритмы обработк...Nikolay Grebenshikov
 
04 Стандартная Библиотека
04 Стандартная Библиотека04 Стандартная Библиотека
04 Стандартная Библиотекаphearnot
 
Msu.Center.Lectures.J04 Std Libs
Msu.Center.Lectures.J04 Std LibsMsu.Center.Lectures.J04 Std Libs
Msu.Center.Lectures.J04 Std Libsolegol
 
Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"LogeekNightUkraine
 
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...JetBrains Russia
 
Groovy и Grails. Быстро и обо всём
Groovy и Grails. Быстро и обо всёмGroovy и Grails. Быстро и обо всём
Groovy и Grails. Быстро и обо всёмRuslan Balkin
 

Mais procurados (19)

07 - Java. Элементы функционального программирования в Java
07 - Java. Элементы функционального программирования в Java07 - Java. Элементы функционального программирования в Java
07 - Java. Элементы функционального программирования в Java
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collections
 
ReactiveUI: Rx + MVVM
ReactiveUI: Rx + MVVMReactiveUI: Rx + MVVM
ReactiveUI: Rx + MVVM
 
контейнеры STL
контейнеры STLконтейнеры STL
контейнеры STL
 
стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введение
 
Scala on android
Scala on androidScala on android
Scala on android
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularities
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателей
 
Java осень 2013 лекция 2
Java осень 2013 лекция 2Java осень 2013 лекция 2
Java осень 2013 лекция 2
 
05 - Java. Collections Framework и Generics
05 - Java. Collections Framework и Generics05 - Java. Collections Framework и Generics
05 - Java. Collections Framework и Generics
 
алгоритмы stl
алгоритмы stlалгоритмы stl
алгоритмы stl
 
Лекция №5. Линейные структуры данных. Предмет "Структуры и алгоритмы обработк...
Лекция №5. Линейные структуры данных. Предмет "Структуры и алгоритмы обработк...Лекция №5. Линейные структуры данных. Предмет "Структуры и алгоритмы обработк...
Лекция №5. Линейные структуры данных. Предмет "Структуры и алгоритмы обработк...
 
Reactive extensions
Reactive extensionsReactive extensions
Reactive extensions
 
Scala for android
Scala for androidScala for android
Scala for android
 
04 Стандартная Библиотека
04 Стандартная Библиотека04 Стандартная Библиотека
04 Стандартная Библиотека
 
Msu.Center.Lectures.J04 Std Libs
Msu.Center.Lectures.J04 Std LibsMsu.Center.Lectures.J04 Std Libs
Msu.Center.Lectures.J04 Std Libs
 
Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"
 
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
 
Groovy и Grails. Быстро и обо всём
Groovy и Grails. Быстро и обо всёмGroovy и Grails. Быстро и обо всём
Groovy и Grails. Быстро и обо всём
 

Destaque (20)

Scala: что, как и зачем?
Scala: что, как и зачем?Scala: что, как и зачем?
Scala: что, как и зачем?
 
Lec 5
Lec 5Lec 5
Lec 5
 
Lec 1
Lec 1Lec 1
Lec 1
 
Lec 4
Lec 4Lec 4
Lec 4
 
Lec 6
Lec 6Lec 6
Lec 6
 
Lec 15
Lec 15Lec 15
Lec 15
 
Lec 11
Lec 11Lec 11
Lec 11
 
Lec 14
Lec 14Lec 14
Lec 14
 
Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)
 
Erlang
ErlangErlang
Erlang
 
Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)
 
Scala training
Scala trainingScala training
Scala training
 
Scala #3
Scala #3Scala #3
Scala #3
 
Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 
Lec 2
Lec 2Lec 2
Lec 2
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Scala #2
Scala #2Scala #2
Scala #2
 
Scala magic
Scala magicScala magic
Scala magic
 
Scala #5
Scala #5Scala #5
Scala #5
 
Scala lecture #4
Scala lecture #4Scala lecture #4
Scala lecture #4
 

Semelhante a Lec 3

Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Объектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptОбъектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptDenis Latushkin
 
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)Evgeny Kaziak
 
Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Technopark
 
Java Core. Lecture# 4. Collections.
Java Core. Lecture# 4. Collections.Java Core. Lecture# 4. Collections.
Java Core. Lecture# 4. Collections.Anton Moiseenko
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Javametaform
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8chashnikov
 
Oop java.generics
Oop java.genericsOop java.generics
Oop java.genericsmuqaddas_m
 
Statis code analysis
Statis code analysisStatis code analysis
Statis code analysischashnikov
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному кодуVasiliy Deynega
 
C# Desktop. Занятие 03.
C# Desktop. Занятие 03.C# Desktop. Занятие 03.
C# Desktop. Занятие 03.Igor Shkulipa
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Dmitry Stropalov
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Stfalcon Meetups
 

Semelhante a Lec 3 (20)

Thread
ThreadThread
Thread
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
course js day 2
course js day 2course js day 2
course js day 2
 
Объектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptОбъектное и прототипное программирование в Javascript
Объектное и прототипное программирование в Javascript
 
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)
 
Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2
 
Java Core. Lecture# 4. Collections.
Java Core. Lecture# 4. Collections.Java Core. Lecture# 4. Collections.
Java Core. Lecture# 4. Collections.
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8
 
Oop java.generics
Oop java.genericsOop java.generics
Oop java.generics
 
Statis code analysis
Statis code analysisStatis code analysis
Statis code analysis
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному коду
 
C# Desktop. Занятие 03.
C# Desktop. Занятие 03.C# Desktop. Занятие 03.
C# Desktop. Занятие 03.
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
Tricky Java Generics
Tricky Java GenericsTricky Java Generics
Tricky Java Generics
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
Kotlin
KotlinKotlin
Kotlin
 
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8
 

Lec 3

  • 1. Курс в Java/Android Занятие 3 Александр Русин e-mail: alexander.rusin@gmail.com Android Developer
  • 2. Класс Object java.lang.Object public class Object Конструктор: 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 public boolean 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 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; }
  • 13. ArrayList ● Реализует интерфейс List. ● Может менять свой размер во время исполнения программы. ● Элементы могут быть абсолютно любых типов в том числе и null.
  • 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/