Главная страница

Это способ ограничения определенного рода информации конкретным списком возможных


Скачать 6.7 Mb.
НазваниеЭто способ ограничения определенного рода информации конкретным списком возможных
АнкорJava Core
Дата15.08.2022
Размер6.7 Mb.
Формат файлаdocx
Имя файлаJava.docx
ТипДокументы
#646169
страница1 из 2
  1   2


Enum:

Enum – это способ ограничения определенного рода информации конкретным списком возможных вариантов.

Enum нужно использовать в Switch case.



В Enum могут содержать методы, конструкторы, переменные!



Если мы создаем конструктор, то он всегда должен быть приватным. Когда мы вызываем элемент enum, то он внутри вызывает конструктор и присваивает значение, которое прописано рядом с перечислением

enum является дочерним классом для java.lang.Enum

Часто используемые методы: valueOf, values;

Kata

System.exit(-1); - немедленно завершает программу.

Примитивные типы данных

Boolean – логический тип(true/false)

Char – символьный тип, хранящий один символ

Byte,short,int,longцелочисленные типы данных, которые отличаются емкостью

Float, double – вещественные типы, отличающиеся емкостью

Нельзя назвать классы этими именами. Примитивный тип свой добавить не сможет!

Каждый примитивный тип хранит определенное количество байтов.

Int хранит в 4 байта или же 32 бита.

Если у нас есть Int a = 5; и int b = a;, то выделяется память и создается копия значения a, и b = 5 соответственно. Последующее изменение a, никак не повлияет на изменение b.

Все остальные типы данных являются ссылочными, как String например(строка символов, или же массив символов).

Boolean: ! – отрицание, && - и, || - или, ^ - исключающее множество.











 — побитовый оператор “НЕ”.

Он работает очень просто: проходится по каждому биту нашего числа и меняет его значение на противоположное: нули — на единицы, единицы — на нули. Если мы применим его к нашему числу 342, вот что получится: 101010110 — число 342 в двоичной системе 010101001 — результат выражения 342

255 максимальные размер массивов.











После того, как мы создали массив, допустим, из 100 элементов, то он автоматически заполняется следующими значениеями:

Для численных и символьных это 0;

Для Boolean это false;

Для ссылок это null;



Можно в фигурных скобках перечислить нужные нам значения и они java поймет сколько их и автоматически определит.

Так же можно создать массив без new, но с {} – где будут перечислены значения, данное действие можно сделать только в одну строку.



Можно создать одним из двух способов массив как входной параметр.

В первом случае мы обязаны передать только массив, а во втором можем передать просто n количество параметров, потом java сама упакует нам эти данные в массив. Так же во втором случае можно передать массив и ошибки не будет.





Условные операторы:

If else

Также можно использовать System.out.println(“….” + (weatherIsGod ? “good” : “bad”));

Swith case



Поддерживает Char, String, ENUM + все целочисленные, кроме long.

Если значение не найдено, то выполняется ветка default.

Если не написать break – то будет дальше продолжаться.

While(Boolean){



}

Do {

. Совершается в любом случае, то есть без условно.

} while (boolean){

.

};

Fori и fori each loop

Для fori каждый элемент является опциональным, то есть их можно не писать и тогда наш цикл будет выполняться бесконечно;

Оператор break прерывает строку и дальше продолжает программа читать. Break применяется во всех видах цикла.

Оператор continue досрочно завершает текущую итерацию и начинает следующую.



ООП – Объектно-ориентированное программирование

3 принципа:

  1. Полиморфизм – это принцип программирования, который звучит так:

Один интерфейс, множество реализаций.

  1. Инкапсуляция – сокрытие от внешнего воздействия со стороны других классов, а воздействие только с помощью методов.

  2. Наследование – заключается в наследовании одно класса от другого, например Класс employees, а также IT, Manager, Saller, эти 3 класса наследуются от класса employees, потому что они являются его родственниками. IT Является employees, но не каждый employees явлется человеком например.

Классы – это заранее написанные чертежи (шаблоны), по которым будут созданы объекты в программе.

При ООП мы используем объекты, для взаимодействия с классами, а не процедуры. С приходом большим количеством кода и усложнения программ ООП как нельзя кстати используется повсеместно, так как благодаря этому можно с легкостью масштабировать код, добавляя новые классы.

Принципы SOLID в Java

SOLID — это акроним, образованный из заглавных букв первых пяти принципов ООП и проектирования. Принципы придумал Роберт Мартин в начале двухтысячных, а аббревиатуру позже ввел в обиход Майкл Фэзерс.

Вот что входит в принципы SOLID:

Single Responsibility Principle (Принцип единственной ответственности). Данный принцип гласит: никогда не должно быть больше одной причины изменить класс.

Open Closed Principle (Принцип открытости/закрытости).

Этот принцип емко описывают так: программные сущности (классы, модули, функции и т.п.) должны быть открыты для расширения, но закрыты для изменения.

Liskov’s Substitution Principle (Принцип подстановки Барбары Лисков).

Это вариация принципа открытости/закрытости, о котором говорилось ранее. Его можно описать так: объекты в программе можно заменить их наследниками без изменения свойств программы.

Interface Segregation Principle (Принцип разделения интерфейса).

Характеризуется следующим утверждением: клиенты не должны быть вынуждены реализовывать методы, которые они не будут использовать.

Dependency Inversion Principle (Принцип инверсии зависимостей).

Этот принцип SOLID в Java описывают так: зависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Java collections and Generics



Java collections – предоставляет способ взаимодействия и управление с объектами в прикладных программах.

Comparable и Comparator позволяет сравнивать, а также позволяет узнать какой объект больше, какой меньше, чтобы сортировать их.

Интерфейс Comparable несет в себе метод compareTo(), где происходит сравнивание текущего объекта и поступающего. А интерфейс Comparator, несет в себе метод compare, где происходит сравнение двух поступающие объектов. Так же, что использовать кастомный компаратор, необходимо использовать так:

Collections.sort(Collections, new …(Кастомный компаратор)), как раз по кастомному компаратору происходит сравнение.

List – упорядоченная последовательность элементов, позволяющая хранить дубликаты и null. Каждый элемент имеет индекс. List(ArrayList, LinkedList, Vector и Stack)

ArrayList – это само расширяемый массив.

List list = new ArrayList<>(Capacity//Another ArrayList);

Add(DataType element) – Boolean // add(int index, DataType element) – Boolean

Get(int index) – datatype

Set (int index, DataType element) – Заменит существующий элемент на другой.

Remove(Object element) – Boolean, если элемент найдет, то тру // remove(int index) – DataType

addAll(ArrayList al) – Boolean – добавляется в конец нашего ArrayList, если там есть данные.

addAll(int index, ArrayList al) – Boolean, после индекса добавляет другой ArrayList.

Clear() – void – очищает ArrayList

IndexOf(Object element) – int – возращает индекс элемента, или же -1, если элемент не найдет! // lastIndexOf(Obeject element), выведет последний подходящий элемент.

Size() – int – размер ArrayList


isEmpty() – Boolean – пустой или нет?

Contains(DataType dt) – Boolean – содержит ли объект

toString() – по умолчанию выводит

removeAll(Collections coll) можно удалить все элементы из первого ArrayList, которые совпадают со вторым. arrayList1.removeAll(arrayList2);

retainAll(Collections e) – так же как и removeAll, только оставляет из 2 ArrayList.

ContainsAll(Collection c) – Boolean содержит ли эллементы arrayList, входящий ArrayList? True/false.

subList(int fromIndex, int toIndex) – list - создает отрывок от одного индекса до другого. [int fromIndex, int toIndex);

List myList = arrayList1.subList(1,4); - являет просто представлением, а не отдельной сущностью.(view) + должны модифицировать(добавлять или изменять) только myList(view/представление).

toArray(new String..) – Object[] из нашего ArrayList получаем массив Object//String etc…

List.of(E … elements) – List и List.copyOf(Collection c) – List - невозможно изменить, неизменяемые, а также не могут содеражть объекты null.

Iterator interface.

Iterator с помощью данного интерфейса мы можем пройтись по всем элементам массива.

Например:

Interator I = arrayList1.iterator();

While(i.hasNext()){

Sout(i.next());

}

Главное отличие Iterator от for each loop, мы можем удалять с помощью Iterator элементы нашего List.

i.next();

i.remove();

LinkedList

Даже создатель не знает зачем нужен LinkedList))

Элементы LinkedList – это звенья одной цепочки. Эти элементы хранят определенные данные, а также ссылки на предыдущий и следующий элементы.

Нулевой элементы имеет ссылку на следующий элемент LinkedList(0 и 1 элементы знают и имею ссылку друг на друга). Т.е каждый элемент LinkedList знает и имеет ссылку на своих соседей. Последний элемент ссылается на null, именно поэтому LinkedList понимает, что это последний элемент.

0 элемент это голова и они идут друг за другом, а последний элемент это хвост и он ссылается на null, поэтому время поиска n-ого элемента O(n).

LinkedList знает где находится голова и где находится хвост, таким образом каждый элемент знает своих рядом стоящих соседей и только их, больше никого!

LinkedList в java реализован как doubly т.е имеет ссылку на следующий и предыдущий.

При использования метода remove(Object element); у LinkedList, просто происходит смена ссылок у объектов, а вот данный элемент никуда не девается из памяти, он остается, но уже не ссылается ни на что!

ListIterator

ListIterator расширяет возможнсти интерфейса Iterator, например появляется метод previous, для возращения к предыдущему элементу.

Например, можно проверить, является ли наш лист палиндромом или нет.

Палиндром – это слова, которые читаются одинаково как слева на права, так и наоборот. МАДАМ.

Binary Search(Бинарный поиск)

Класс Collections. На конце s.

Как работает Binary Search:

Есть массив {1, -7, 6, 215, -15, 0, 21, -56, 4}

И нам среди этих элементов нужно найти число 4.

В обычном массиве был бы поиск O(n), элемент за элементом, а в бинарном поиске следующее:

  1. Сначала ставим в порядке возрастания: {-56, -15, -7, 0, 1, 4, 6, 21, 215}

  2. Находим середину массива, это элемент 1.

  3. Дальше смотрим, 4 > 1? Да, поэтому идем направо.

  4. Далее , остается массив {4, 6, 21, 215}

  5. Находим середину 6 или 21, 6 > 4 ? Да, поэтому идем налево и находим элемент 4.

Соответственно, чтобы найти в худшем случае элемент в массиве, состоящий из 10 элементов, понадобится максимум 10 шагов, а при бинарном поиске следующее:

10

5

2

1

А при бинарном поиске 4, соответственно более эффективнее использовать Binary search.

Метод для работы с Binary search:

Collections.sort(ArrayList); Сортируется по Natural order.

Int index = Collections.binarySearch(arrayList, поиск значения); Если выдается отрицательное значение, то такого элемента не существует.

Big O notation

O(1) – константное время, за которое выполняется метод(линеное).

Метод Get для ArrayList выполняется с постоянной скоростью:



O(n) – зависимость скорости выполнения программы.

O(log(n)) – бинарный поиск.

Vector

Vector – устаревший synchronized класс. В своей основе содержит массив элементов Object. Не рекомендован для использования.

Vector vector = new Vector<>();

vector.add(“Ilya”);

vector.add(“Andrey”);

vector.add(“Katya”);

vector.add(“Masha”);

sout(vector);

vector.firstElement();

vector.lastElement();

vector.remove(int index);

Stack

Stack – устаревший synchronized класс. Использует принцип LIFO.

Не рекомендован для использования.

push(DataType dt) – добавить в Stack;

pop() – берет самый верхний элемент, то есть самый последний и удаляет его. Метод так работает, потому что Stack работает по методу LIFO.

isEmpty() – Boolean пустой или полный ли stack.

peek() – просто возвращает элемент на самом верху Stack, но не удаляется.

Map



HashMap – элементами HashMap являются пары ключ/значение. HashMap не запоминает порядок добавления элементов. Его методы работаю очень быстро.

Map map1 = new HashMap<>();

map.put(1000, “Ilya”);

…….

Ключи элементов должны быть уникальными. Ключ может быть null. Если ключ один и тот же, то значение просто перезаписывается на последнее.

Значения элементов могут повторяться. Значения могут быть null.

putIfAbsent(Key, Value) – добавить, если такого еще нет в HashMap.

Get(Key) – взять элемент по ключу. А если нет такого ключа то null.

remove(Key) – удалить по ключу.

  1   2


написать администратору сайта