Эмпирическое правило для выбора реализации коллекции Java?

Я предполагаю, что вы знаете collections разницу между списком, набором collections и картой из приведенных выше jdk ответов. Другое дело, почему core-java вы должны выбирать между .java их реализующими классами. Например:

Список:

  1. ArrayList быстро извлекается, но медленно вставляется. Это хорошо для реализации, которая много читает, но мало что вставляет/удаляет. Он хранит свои данные в одном непрерывном блоке памяти, поэтому каждый раз, когда ему нужно расшириться, он копирует весь массив.
  2. LinkedList медленно извлекается, но быстро вставляется. Это хорошо для реализации, которая много вставляет/удаляет, но мало читает. Он не хранит весь массив в одном непрерывном блоке памяти.

Набор:

  1. HashSet не гарантирует порядок итерации и, следовательно, является самым быстрым набором. Он имеет большие накладные расходы и медленнее, чем ArrayList, поэтому его не следует использовать, за исключением большого объема данных, когда его скорость хеширования становится фактором.
  2. TreeSet сохраняет порядок данных, поэтому работает медленнее, чем HashSet.

Карта: Производительность core-java и поведение HashMap и TreeMap core-java аналогичны реализациям Set.

Не oraclejdk следует использовать Vector java-api и Hashtable. Это синхронизированные core-java реализации до выпуска новой .java иерархии коллекций, поэтому j2se они медленные. Если необходима .java синхронизация, используйте java-libraries Collections.synchronizedCollection().

java

collections

heuristics

2022-10-26T04:31:44+00:00