суббота, 1 августа 2020 г.

Прибавление 2-х чисел при помощи Аннотаций (Annotation)

import cf.tilgiz.annotation_test.handler.MathHandler;

import java.lang.reflect.Method;


public class Dispatcher {
public static void main(String[] args) throws NoSuchMethodException {
MathHandler mathHandler = new MathHandler();

Class<MathHandler> cl = MathHandler.class;
Method method = cl.getDeclaredMethod("addTwoNumbers", int.class, int.class);
MathAnno mathAnno = method.getAnnotation(MathAnno.class);

mathHandler.addTwoNumbers(mathAnno.num1(),mathAnno.num2());
}
}
package cf.tilgiz.annotation_test.handler;

import cf.tilgiz.annotation_test.annotation.MathAnno;

public class MathHandler {
@MathAnno(num1 = 10, num2 = 20)
public void addTwoNumbers(int num1, int num2) {
System.out.println(num1 + num2);
}
}
package cf.tilgiz.annotation_test.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MathAnno {
int num1() default 0;
int num2() default 0;

}

суббота, 18 апреля 2020 г.

Пул потоков Thread pool

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;
public class pool {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(3);        for (int i = 0; i < 5; i++) {
            executorService.submit(new work(i));        }
        executorService.shutdown();        try {
            executorService.awaitTermination(1, TimeUnit.DAYS);        } catch (InterruptedException e) {
            e.printStackTrace();        }
    }
}
class work implements Runnable{
    private int id;    public work(int id) {
        this.id = id;    }
    @Override    public void run() {
        try {
            Thread.sleep(5000);        } catch (InterruptedException e) {
            e.printStackTrace();        }
        System.out.println("Work with id = " + id + " finished.");    }
}

среда, 30 октября 2019 г.

Честная очередь FIFO Queue

В данном примере цифры будут выводиться по правилу FIFO
Queue q1 = new LinkedList<>();
q1.offer(4);
q1.offer(5);
q1.offer(23);
q1.offer(1);

System.out.println(q1);
System.out.println(q1.poll());
System.out.println(q1.poll());
System.out.println(q1.poll());

В этом примере poll будет выводить цифры отсортированными по возрастанию...
Queue q = new PriorityQueue<>();
q.offer(4);
q.offer(5);
q.offer(23);
q.offer(1);

System.out.println(q);
System.out.println(q.poll());
System.out.println(q.poll());
System.out.println(q.poll());

Queue очередь

A PriorityQueue - это то, что называется бинарной кучей. Он упорядочен/отсортирован только в том смысле, что первый элемент является наименьшим. Другими словами, он заботится только о том, что находится в передней части очереди, остальные "заказываются", когда это необходимо.

Элементы упорядочиваются только по мере их удаления, т.е. удаляются из очереди с помощью poll(). Именно по этой причине PriorityQueue удается получить такую ​​хорошую производительность, поскольку она не делает больше сортировки, чем нужно в любое время.

Вычисление среднего значения >>>1

int low = 0;
int high = 75;
int mid = (low + high) / 2;
int mid1 = (low + high) >>> 1;

Для второго вычисления работает при условии
|low| <= |high|

т.е. в случае
int low = -77;
int high = 75;
int mid1 вернет неверный результат.

Convert int[] to Integer[]

Convert int[] to Integer[]:

int[] primitiveArray = {1, 2, 3, 4, 5};
Integer[] objectArray = new Integer[primitiveArray.length];

for(int ctr = 0; ctr < primitiveArray.length; ctr++) {
objectArray[ctr] = Integer.valueOf(primitiveArray[ctr]); // returns Integer value
}


Convert Integer[] to int[]:

Integer[] objectArray = {1, 2, 3, 4, 5};
int[] primitiveArray = new int[objectArray.length];

for(int ctr = 0; ctr < objectArray.length; ctr++) {
primitiveArray[ctr] = objectArray[ctr].intValue(); // returns int value
}


В Java 8 мы можем сделать это

int[] ints = {1,2,3};
List list = Arrays.stream(ints).boxed().collect(Collectors.toList());

Сортировка массива(Array) и списка(List)

Integer[] arr2 = {66,3,24,6,9};
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));

ArrayList colors = new ArrayList<>();
colors.add("red");
colors.add("yellow");
colors.add("black");
colors.add("blue");
colors.add("green");
Collections.sort(colors);
System.out.println(colors);

byte

byte
00000001 => 1
00000010 => 2
......
01111110 => 126
01111111 => 127
10000000 => -128
10000001 => -127
10000010 => -126
......
11111110 => -2
11111111 => -1

String.intern()

"123" == "123" // true
("12" + "3").intern() == "123" // true
new String("123") == new String("123") // false
new String("123") == "123" // false
new String("123").intern() == "123" // true

Наследование

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

Convert List to Arrays, Arrays to List

String[] colors = {"yellow", "green", "blue"};
LinkedList ll = new LinkedList<>(Arrays.asList(colors));
ll.add("red");
ll.addFirst("black");

ListIterator listIterator = ll.listIterator();
while (listIterator.hasNext()){
System.out.println(listIterator.nextIndex() + " = " +listIterator.next());
}

colors = ll.toArray(new String[ll.size()]);

System.out.println(Arrays.toString(colors));

Boxing unboxing

Boxing
int a = 44335;
Integer b = Integer.valueOf(a);
Integer c = a; // automatic boxing

Unboxing
Integer c = 566;
int y = c.intValue();
int z = c; // automatic unboxing

Compares two strings lexicographically

"Test".compareTo("Test") => 0

"Test1".compareTo("Test") => 1
"a".compareTo("A") => 32
"z".compareTo("a") => 25

"Test".compareTo("Test1") => -1
"a".compareTo("b") => -1
"a".compareTo("c") => -2
"a".compareTo("d") => -3

Деление на ноль

System.out.println(2.0 % 0);// NaN
System.out.println(0.0 % 0);// NaN
System.out.println(2.0 / 0);// Infinity
System.out.println(0.0 / 0);// NaN
System.out.println(Math.sqrt(-1)); // NaN
System.out.println( 0.0/0 );// NaN
System.out.println(2 / 0);// Ошибка выполнения - RuntimeError
Exception in thread "main" java.lang.ArithmeticException: / by zero

Потоки Thread

public class MyThread extends Thread {
public static void main(String[] args) {
new MyThread().start();
}
}

При запуске нового потока выполняется код, размещённый в методе run(). Класс MyThread наследует от класса Thread пустой метод run() - поэтому новый поток ничего не выведет и просто завершит свою работу, а после этого закончит свою работу и всё приложение.

Default значения

Boolean b1; // = null
boolean b2; // = false
Integer b3; // = null
int b4; // =0

Списки - ArrayList

ArrayList list = new Arraylist();
В этом списке могут находиться элементы разного типа.

ArrayList list = new Arraylist<>();
В этом списке могут находиться элементы только одного типа.

ArrayList()
Constructs an empty list with an initial capacity of ten (10).

Массивы - Arrays

Сортировка
int[] arr = {3,6,1,2};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));

Null

Car car = null;
System.out.println(null==null); // true
System.out.println(car==null); // true
System.out.println(car.equals(null)); // NullpointerException.

Лоигческий И

result = 255 & 1 = 1

11111111 1 & 1 = 1 0 & 1 = 0
00000001 1 & 0 = 0 0 & 0 = 0
----------------
00000001