Экзамен Коллекции | Блок 2 Flashcards
В чём отличие ArrayList от LinkedList?
ArrayList - это список на основе массива. LinkedList - связанный список на основе элементов и связи между ними. В качестве LinkedList лучше всего подходит представление вагонов поезда сцепленных последовательно.
ArrayList следует использовать, когда в приоритете доступ по индексу, так как эти операции выполняются за константное время. Добавление в конец списка в среднем тоже выполняется за константное время. Кроме того в ArrayList нет дополнительных расходов на хранение связки между элементами. Минусы в скорости вставки/удаления элементов находящихся не в конце списка, так как при этой операции все элементы правее добавляемого/удаляемого сдвигаются.
LinkedList удобен когда важнее быстродействие операций вставки/удаления, которые в LinkedList выполняются за константное время. Операции доступа по индексу производятся перебором с начала или конца (смотря что ближе) до нужного элемента. Дополнительные затраты на хранение связки между элементами.
Одним словом - если часто вставляете/удаляете - выбирайте в пользу LinkedList, в противном случае ArrayList
В чём отличие HashSet от TreeSet?
HashSet является одной из наиболее используемых структур данных в Java. Он использует хеширование для хранения элементов, и, следовательно, время выполнения основных операций, таких как add(), remove() и contains(), составляет в среднем константное время O(1).
Однако HashSet не гарантирует порядок элементов. Это означает, что при добавлении элементов в HashSet, их порядок может быть произвольным.
TreeSet, с другой стороны, обеспечивает упорядоченность элементов. Это достигается за счет использования красно-черного дерева (формы бинарного дерева поиска) для хранения данных. Время выполнения основных операций, таких как add(), remove() и contains(), составляет O(log(n)), где n — число элементов в наборе.
Однако это преимущество может стать недостатком, если требуется значительное количество операций вставки, удаления или поиска, поскольку TreeSet работает медленнее, чем HashSet.
Выбор между HashSet и TreeSet в значительной степени зависит от конкретных требований задачи. Если важнее скорость выполнения операций, а порядок элементов не имеет значения, то лучше выбрать HashSet. Если же требуется поддерживать элементы в отсортированном порядке, то следует использовать TreeSet.
Как задается порядок следования объектов в коллекции, как отсортировать коллекцию?
Большинство коллекций имеет метод sort().
Для того, чтобы отсортировать элементы коллекции, классы объектов должны реализовывать интерфейс Comparable и его метод compareTo() в котором текущий экземпляр класса сравнивается с переданным в него объектом того же класса и возвращает int.
По умолчанию сортировка производится по возрастанию, чтобы задать другой порядок в метод sort() нужно передать объект типа Comparator. Для каждого класса можно описать класс-компаратор с методом compare(), в котором будет вызываться метод compareTo() в нужном нам порядке.
Чем отличается Comparable от Comparator?
Comparable - это свойство объекта. Субъектом сравнения выступает сам экземпляр класса.
Comparator - это некоторый сторонний субъект, который сравнивает два экземпляра класса.
Comparable всегда используется для описания Natural order, при этом Comparator может описывать и другие варианты сравнения. Например, в обратном порядке.
Что такое сортировка по принципу Natural Order?
Natural Order - или натуральный порядок описан для всех стандартных типов и классов в Java. Например для чисел - это порядок по возрастанию. Для всех остальных классов используется интуитивное представление разработчика о порядке в данном контексте.
Что такое equals и hashcode?
equals() и hashcode() - это стандартные методы класса Object, которые часто переопределяются в пользовательских классах. Метод equals() используется для сравнения двух объектов одного класса. Если x.equals(y) == true, to x.hashcode() == y.hashcode(), но не наоборот. Таким образом при переопределении метода equals() переопределяется и методы hashcode();
Какие есть способы перебора всех элементов List?
Циклы for i, for each;
Получение итератора коллекции методом iterator() и вызовом метода hasNext() в цикле.