Это способ ограничения определенного рода информации конкретным списком возможных
Скачать 6.7 Mb.
|
1 2 342Enum: 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: ! – отрицание, && - и, || - или, ^ - исключающее множество. 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 принципа: Полиморфизм – это принцип программирования, который звучит так: Один интерфейс, множество реализаций. Инкапсуляция – сокрытие от внешнего воздействия со стороны других классов, а воздействие только с помощью методов. Наследование – заключается в наследовании одно класса от другого, например Класс 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 List – упорядоченная последовательность элементов, позволяющая хранить дубликаты и null. Каждый элемент имеет индекс. List(ArrayList, LinkedList, Vector и Stack) ArrayList – это само расширяемый массив. List 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 retainAll(Collections ContainsAll(Collection > c) – Boolean содержит ли эллементы arrayList, входящий ArrayList? True/false. subList(int fromIndex, int toIndex) – list List toArray(new String..) – Object[] из нашего ArrayList получаем массив Object//String etc… List.of(E … elements) – List Iterator interface. Iterator с помощью данного интерфейса мы можем пройтись по всем элементам массива. Например: Interator 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), элемент за элементом, а в бинарном поиске следующее: Сначала ставим в порядке возрастания: {-56, -15, -7, 0, 1, 4, 6, 21, 215} Находим середину массива, это элемент 1. Дальше смотрим, 4 > 1? Да, поэтому идем направо. Далее , остается массив {4, 6, 21, 215} Находим середину 6 или 21, 6 > 4 ? Да, поэтому идем налево и находим элемент 4. Соответственно, чтобы найти в худшем случае элемент в массиве, состоящий из 10 элементов, понадобится максимум 10 шагов, а при бинарном поиске следующее: 10 5 2 1 А при бинарном поиске 4, соответственно более эффективнее использовать Binary search. Метод для работы с Binary search: Collections.sort(ArrayList Int index = Collections.binarySearch(arrayList, поиск значения); Если выдается отрицательное значение, то такого элемента не существует. Big O notation O(1) – константное время, за которое выполняется метод(линеное). Метод Get для ArrayList выполняется с постоянной скоростью: O(n) – зависимость скорости выполнения программы. O(log(n)) – бинарный поиск. Vector Vector – устаревший synchronized класс. В своей основе содержит массив элементов Object. Не рекомендован для использования. 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 map.put(1000, “Ilya”); ……. Ключи элементов должны быть уникальными. Ключ может быть null. Если ключ один и тот же, то значение просто перезаписывается на последнее. Значения элементов могут повторяться. Значения могут быть null. putIfAbsent(Key, Value) – добавить, если такого еще нет в HashMap. Get(Key) – взять элемент по ключу. А если нет такого ключа то null. remove(Key) – удалить по ключу. 1 2 |