Archive for category Java

Java и $

Мало кто знает, что в Java в идентификаторах допускается использование символа $ наряду с латинскими буквами, цифрами и сиволом подчеркивания. Потому следующий код синтаксически верный:

static int total$(int bank$[]) {
    int total$ = 0;
    for (int $ : bank$)
        total$ += $;
    return total$;
}

Интересующиеся могут просмотреть Java Language Specification, Third Edition (§3.8).

Знак доллара используется компилятором Java в именах внутренних и анонимных классов. Использовать этот знак в коде не рекоммендуется ни спецификацией ни мною.

No Comments

Что выведет этот код?

Простой код на знание порядка выбора метода из перегруженных вариантов.

public class VarArgs {
   
    public static void main(String[] args) {
        foo(0, 1);
        foo((int) 0, 1);
        foo((Integer) 0, 1);
    }

    public static void foo(int a, int b) {
        System.out.print("A");
    }

    public static void foo(int... args) {
        System.out.print("B");
    }

    public static void foo(Integer... args) {
        System.out.print("C");
    }

}

1 Comment

Цикл по элементам java.util.Map

Бывают случаи, когда нужно пройтись по всем парам ключ=значение в коллекции java.util.Map. Простая реализация этого:

Map<String, String> map = getMap();
for (String key : map.keySet()) {
    String value = map.get(key);
    // ...
}

Существует и другой способ, когда цикл проходит по парам, а не по ключам:

Map<String, String> map = getMap();
for (Map.Entry<String, String> entry: map.entrySet()) {
    String key= entry.getKey();
    String value = entry.getValue();
    // ...
}

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

Среднее время теста №1: 19568284 наносекунд
Среднее время теста №2: 17059243 наносекунд
Для объектов Map<String, String>, состоящих из 100000 элементов, где ключи являются случайной строкой длиной от 1 до 30 латинских символов. Среднее время выполнения полной итерации выбиралось по результатам 1000 тестов.

, ,

1 Comment