Pull to refresh

Comments 5

Посыл статьи хороший, но в изложении какая-то каша. Скорее всего, это просто плохой перевод.

Элементы массива доступны по индексу ячейки.
Значение по умолчанию для ячеек – null

Для массивов объектов верно, для массивов примитивов значение зависит от типа компонента (для чисел 0, для булева false).

ListIterator<String> listIterator = list.listIterator();
while (listIterator.hasNext()) { ... }

Пожалуйста, не надо в 2022 году использовать итераторы в явном виде. Работа с итераторами может пригодится только в одном случае - удаление элементов. В остальных случаях for-each.

ArrayList list = new ArrayList() {{
    add("Hello");                           // быстрая инициализация
    add(" world!");
}};

То, что тут raw-types, спишем на невнимательность. Но не надо так делать, вы же понимаете что тут неявно анонимный класс порождается?

Map – это массив на 16 buckets (корзин) – от 0 до 15.
Расширяется: 16 – 32 – 64 – и далее переходит к структуре red-black tree.

Во-первых, Map это интерфейс, а реализации у него: HashMap, TreeMap и т.д. Во-вторых, система бакетов и в правду применяется у HashMap, и в правду таблица бакетов расширяется до указанного предела 64.. но потом сами бакеты из связанного списка преобразуются в RB-дерево. Таблица бакетов никуда не девается.

Iterator iterator = set.iterator();        // итерация по элементам множества
while(iterator.hasNext()) { ... }

Аналогичное замечание, не надо вручную управлять итераторами.

Классы Hashable

Hashtable, как и упомянутый на диаграмме Vector надо забыть навсегда.

Пакет java.util.concurrent предоставляет реализации одновременных коллекций

Очень странный перевод. "Конкурентные коллекции" – это более чем понятное определение.

    public int compare(Person p1, Person p2) {
        return p1.uuid - p2.uuid;
    }

Если не хотим словить баг, сравнение чисел надо делать через Integer.compare, или используя методы Comparator: compareInt, thenCompareInt.

Статья нагружена ненужными уточнениями, переводом javadoc с таблицей методов, устаревшими примерами кода... и возникает вопрос – ну и чего хотели добиться?

За замечания спасибо – ради получения таких уточнений это и сделано.
Внес эти правки.

Про comparator можно побольше) интерфейс с первого взгляда прост, но когда встречается надобность в нестандартных сортировках - тут возникают вопросы, а собственно как обращаться к дополнительным элементам. Порой даже приходилось использовать tmp посредник объект для расширения сравнения, возможно есть более правильные конструкции ?!

Я в своем комментарии упоминал, используем современные методы Comparator

        @Value
        class Person {
            String name;
            int age;
        }

        var cmp = Comparator.comparing(Person::getName)
            .thenComparingInt(Person::getAge);

Поддерживаю, посыл хороший.

Рекомендую при описании функций указывать полную сигнатуру, вместе с классом возвращаемого объекта. Это очень помогает читающему)

Sign up to leave a comment.

Articles