Giter VIP home page Giter VIP logo

2023-autumn-ab-java-2-hw-1-mech-maks's Introduction

  1. Изучить HashMap – написать что вы поняли о HashMap (до 2 баллов)

  2. Написать через функциональные интерфейсы цепочку обработчиков класса Person, которые а) меняют маму с папой местами (такие времена) б) логгируют “changed” (System.out.println()) в) удаляют друга (friend = null) В роли цепочки использовать обычную коллекцию. (2 балла) (Пояснения в тг)

  3. Написать программу, которая в 3 потока увеличивает единичку до 30001. Кол-во инкрементаций в каждом потоке по 10000. (3 балла)

  4. Интерфейс Iterable предоставляет итератор и метод forEach. В каких случаях forEach не сможет сделать то, что может итератор? Потыкайте, повыдумывайте кейсы (3 балла)

Решение

Задача 1:

Изучить HashMap – написать что вы поняли о HashMap

Особенности HashMap<>:

  • Часть Java Collection Framework, но коллекцией не является (реализует интерфейс Map, ссылка)
  • Хранит пары ключ-значение, ключи уникальные.
  • Работает за время подсчета хэша от ключа, если нет коллизий. Если коллизия случается, то такие пары хранятся в одном бакете в виде сбалансированного (красно-черного, since Java 8) дерева по значениям (если значения не могут сравниваться друг с другом, то идет сравнение по адресам сохранненых объектов). Получается, что в худшем случаем доступ к элементу за O(log(n)), если все n элементов угодили в один бакет.
  • Несортированная коллекция
  • Допускает единственный null ключ и множество null значений
  • Не thread-safe
  • Итерирование по содержимому: HashMap<>::entrySet(), HashMap<>::keySet(), HashMap<>::values()

Задача 2:

Написать через функциональные интерфейсы цепочку обработчиков класса Person, которые:

a. меняют маму с папой местами

b. логгируют “changed” (System.out.println())

Перенес все это дело в код проекта.

Задача 3:

Написать программу, которая в 3 потока увеличивает единичку до 30001. Кол-во инкрементаций в каждом потоке по 10000.

public static void main(String[] args) throws InterruptedException {
    AtomicInteger j = new AtomicInteger(1);
    int cnt = 10000;

    Runnable r = () -> {
        for (int i = 0; i < cnt; ++i) {
            j.incrementAndGet();
        }
    };

    Thread t1 = new Thread(r);
    Thread t2 = new Thread(r);
    Thread t3 = new Thread(r);

    t1.start();
    t2.start();
    t3.start();

    t1.join();
    t2.join();
    t3.join();

    System.out.println(j.get()); // 30001
}

Задача 4:

Интерфейс Iterable предоставляет итератор и метод forEach. В каких случаях forEach не сможет сделать то, что может итератор? Потыкайте, повыдумывайте кейсы

public static void main(String[] args) throws InterruptedException {
    List<String> lst = new ArrayList<>();
    lst.add("a");
    lst.add("b");
    lst.add("c");
    lst.add("d");
    lst.add("e");
    System.out.println(lst); // [a, b, c, d, e]

    // Concurrent modification exception
    // lst.forEach(lst::remove); 
    
    // But with iterator works fine
    Iterator<String> it = lst.iterator();
    while (it.hasNext()) {
        String elem = it.next();
        it.remove();
    }

    System.out.println(lst); // []
}

Для остановки итераций в обычном for используется break. А вот выйти из .forEach(...) вообще никак нельзя.

2023-autumn-ab-java-2-hw-1-mech-maks's People

Contributors

dmitrii-artuhov avatar mech-maks avatar github-classroom[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.