Algoritms Flashcards
чтение linked list
LinkedList list = new LinkedList(); while (true) { int value = NextValue(); if (value != 0xFFFF) { list.Add(value); } else { break; } }
Реализуйте алгоритм обхода бинарного дерева
Собственно обход дерева, как и все обходы графов ( а дерево это обычный неориентированный граф ) делается двумя методами: в глубину (Depth-first) и в ширину (Breadth-first).
знаете что решение где-то не далеко от вашей ноды — то лучше использовать обход в ширь, чтоб не закапываться глубоко в дерево
если дерево очень глубокое, а решение редки — то лучше все таки попробовать поиск в ширь
если дерево очень широкое, то можно попробовать поиск в глубь, потому как поиск в ширь может забрать слишком много времени.
Если в глубину тоберешь левый элемент рекурсивно, пока есть потом правый пока есть
если в ширину, то сначала левый и правый, потом в каждом из них левый и правый и т.д
Jackson
ObjectMapper mapper = new ObjectMapper(); String jsonString = "{\"name\":\"Mahesh\", \"age\":21}"; Student student = mapper.readValue(jsonString, Student.class); jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(student);
автоуаковка и минусы
Автоупаковка это обертка int в Integer….минусы - больше требует памяти и больше времени исполнения
канает ли такой код?
public static void test(int …a) {
System.out.println(“int…”);
}
да канает
Что выведет на экран следующая программа? public class Test { public static void main(String[] args) { System.out.println("4/2=" + 4/2 == "4/2=2"); } }
true т.к происходит сравнение двух одинаковых строк
В соответствии со спецификацией Java 7 выражение “4/2=” + 4/2 == “4/2=2” является константным выражением (constant expression).
Значения константных выражений вычисляются на этапе компиляции, и у данного выражения должно быть значение true.
i=1;
i = i++;
чему будет в итоге равно i
i=1 т.к i передало еденицу, а лишь потом инкрементировалось
public class Funcs extends java.lang.Math { ///что здесь не так? }
java.lang.Math финализирован и от него не унаследуешься
Float.NaN == Float.NaN вернет false или true
false Т.к В Java NaN’ы несравнимы между собой
Integer a = 120; Integer b = 120; Integer c = 130; Integer d = 130; System.out.println(a==b); System.out.println(c==d);
Для более эффективного использования памяти, в джаве используются так называемые пулы. Есть строковый пул, Integer pool итд. Когда мы создаем объект не используя операцию new, объект помещается в пул, и в последствии, если мы захотим создать такой же объект (опять не используя new), новый объект создан не будет, а мы просто получим ссылку на наш объект из пула.
Особенность Integer-пула — он хранит только числа, которые помещаются в тип данных byte: от -128 до 127. Для остальных чисел пул не работает.
String hello = “Hello”, lo = “lo”;
System.out.print((testPackage.Other.hello == hello) + “ “);
System.out.print((other.Other.hello == hello) + “ “);
System.out.print((hello == (“Hel”+”lo”)) + “ “);
System.out.print((hello == (“Hel”+lo)) + “ “); // runtime
System.out.println(hello == (“Hel”+lo).intern());
- Строковые литералы в одном классе представляют собой ссылки на один и тот же объект.
- Строковые литералы в разных классах, но в одном пакете представляют собой ссылки на один и тот же объект.
- Строковые литералы в разных классах и разных пакетах всё равно представляют собой ссылки на один и тот же объект )).
- Строки, получающиеся сложением констант, вычисляются во время компиляции и далее смотри пункт первый.
- Строки, создаваемые во время выполнения НЕ ссылаются на один и тот же объект. (поэтому четвертый вывод — false)
- Метод intern в любом случае возвращает объект из пула, вне зависимости от того, когда создается строка, на этапе компиляции или выполнения. (Поэтому последний вывод — true).
static void method(long a, long b) {
System.out.println(“inside long”);
}
static void method(Integer a, Integer b) {
System.out.println(“inside INTEGER”);
}
public static void main(String[] args) {
int a = 2;
int b = 3;
method(a,b);
}
какой меод запустится
в пятой джава первый т.к нет автоуппаовки, а не в пятой второй, т.к с автоупаковкой имеет высший приоритет
КАк описать в POJO @Override toSgtring??? код в студию!
@Override
public String toString() {
return String.format(“{id: %s, name: %s, checked: %s}”, id, name, checked);
}
как прочитать CSV файл
try (Reader reader = Files.newBufferedReader(Paths.get("file.csv")); CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT .withFirstRecordAsHeader() ) { for (CSVRecord csvRecord : csvParser) { // Access String name = csvRecord.get("MyColumn"); // (..) }
Записать CSV файл
String str = "Hello"; BufferedWriter writer = new BufferedWriter(new FileWriter(fileName)); writer.write(str);
writer.close();