Java2 Flashcards
Как добавить элемент в Set?
name_of_set.add(1);
Если нужно добавить в Map или Set в качестве ключа собственный объект, что нужно сделать перед этим?
перезаписать методы hashcode() и equals(), чтобы Java понимала, что объекты разные.
В каком порядке вызываются методы equals() и hashcode(), когда мы сравниваем объекты?
Сначала hashcode, если он “отработал” правильно, но этом заканчиваем проверку, если не т- equals();
Как называется, когда хеши объектов одинаковые, а сами объекты разные ?
Коллизия. hashCode() возвращает int, а размер int ограничен. Поэтому необходим метод equals().
Что значит, если метод hashCode() выдал два разных числа?
Объект точно разные.
Что лежит в основе hashSet?
hashMap, ключи которого всегда являются объектами класса objekt и просто скрыты.
Чем на самом деле являются значения в HashSet?
Ключами HashMap, с отрезанными значениями.
Что является “ячейкой” для HashMap? Что хранится в каждой ячейке?
Массив.
Связный список.
Как добавить свою логику сортировки объектов?
Мы должны создать новый класс, который реализует интерфейс Comparator.
Сколько методов имеет интерфейс Comparator?
Всего один - compare();
Что нужно сделать для того, чтобы реализовать свою логику сортировки?
Создать класс, с реализацией интерфейса Comparator и передать его объект в метод Collection.sort();
Когда класс имплементирует интерфейс Comparator, о чем нужно не забыть?
Что интерфейс параметризованный, нужно указать тип.
class X implements Comparator {
}
Где находится вся логика сортировки в классе, имплементирующем Comparator?
в методе Compare ();
Что представляет собой конвенция для метода Compare() интерфейса Comparator?
Метод compare(x1,x2) имеет два параметра и возвращаемый тип int :
если х1 > x2 => 1;
x1 < x2 => -1;
x1 == x2 => 0;
Какая вариация метода Collection.sort () нужна для реализации своей логики сортировки?
Collection.sort() c двумя параметрами, где первый - сортируемый объект, второй - объект класса, имплементирующего интерфейс Comparator с перезаписанным методом Compare;
Как использовать анонимный класс для создания своей логики сортировки?
Collection.sort(сортируемый_array, new Comparator { @Override //перезапись Compare });
Как “дать понять” JAVE, что объекты определенного класса годятся для сортировки, т.е. объекты можно сравнивать между собой?
Класс должен имплементировать интерфейс Comparable
Какой метод нужно перезаписать, имплементируя интерфейс Comparable?
compareTo();
Что иы делаем, имплементируя интерфейс Comparable?
Задаем для класса естественный порядок сортировки
Какие два метода существуют для добавления объектов в Queue, в очередь?
add();
offer();
Какие два метода существуют для изъятия объектов из очереди?
remove();
poll();
Как ограничить максимальный размер очереди?
класс ArrayBlockingQueue, при создании объекта нужно указать размер очереди.
Что делает методsы remove() и poll() в Queue?
вызовет элемент в голове списка и удалит его.
Какая разница между парами add() и offer(); remove() и poll(); element() и peek(); ? в Queue?
Первые выбрасывают исключения, вторые специальные значения ( у метода offer - false)
По какому принципу работает класс Stack?
LIFO
Какой метод добавляет элемент в Stack?
Какой метод достает элемент из Stack?
name_of_stack.push(value);
pop();
Как создать итератор?
Iterator it = имя_коллекции.iterator();
дальше можно вызывать методы:
it.next();
it.hasNext();
Несмотря на то, что Цикл for each имеет под капотом Iterator, какое существенное различие есть между ними?
Iterator способен менять коллекцию во время того, как проходится по ней, а for each нет.
Как запустить код в отдельном потоке?
- Создать класс, наследующийся от Thread.
- В нем переопределить метод Run(), вписав в него наш код
- В методе main вызвать метод start(); на объекте нашего класса;
class MyThread extends Thread { public void run() { //наш код } }
Как заставить поток “заснуть” на определенное время? На одну секунду.
В потоке написать:
Thread.sleep(1000);
Как создать поток с помощью интерфейса Runnable?
1) Создать класс, имплементирующий интерфейс Runnable;
class Runner extends Runnable { }
2) Переопределить метод Run() с подходящей нам логикой.
3) Создать объект базисного класса
и в конструктр передаем new + объект нашего созданного класса: Thread thread = new Thread(new Runner());
4) Вызвать метод thread.start();
Где пишется ключевое слово synchronized?
в теле метода, оно говорит, что тело метода может одновременно исполняться только одним потоком
Что необходимо для использования ключевого слова synchronized в методе?
объект, на котором вызывается этот метод.
Как в методе ограничить код, который должен быть синхронизирован, с помощью synchronized блока?
public void increment (this) { synchronized() { count++; } }
Как выглядит создание потока с помощью анонимного класса?
public void myMethod() { Thread thread = new Thread(new Runnable () { //переопределение метода Run() } }
Какой метод гарантирует, что поток закончит свою работу и только потом запустится следующий?
имя_потока.join();
Где возможно написание ключевого слова synchronized?
Только в методах.
Что значит написанное в сигнатуре метода слово synchronized?
Что доступ к телу метода одновременно может получить только один поток.
Какое обязательно условие для употребления слова synchronized?
Должен быть объект.
Как генерировать случайные числа в определенном промежутке?
Random random = new Random(); int i = random.nextInt(100);
Два способа, как явно создать поток в Java?
Унаследоваться от класса Thread, создать объект этого класса
Создать объект класса Thread и передать ему в конструктор объект реализующий интерфейс Runnable;