2015-05-03 1 views
-1

Я искал множество веб-сайтов, содержащих информацию о пространственной сложности структур данных Java. Я ищу специально для космической сложности HashMap, ArrayList, Stack и LinkedList. Один сайт, который я обнаружил, приблизился и имел информацию только о Stack и LinkedList: http://bigocheatsheet.com/, но у него был только худший случай. Кто-нибудь знает о каких-либо других источниках, которые имеют информацию о сложности пространства HashMap или ArrayList, предпочтительно в среднем случае и в худшем случае?Пространственная сложность структур данных Java

+2

Я не понимаю ваш вопрос. Пространственная или временная сложность связана с операцией, подобной поиску элемента. В Hashmap нет пространственной сложности. – Lokesh

+0

http://java-performance.info/memory-consumption-of-java-data-types-1/ Возможно, стоит посмотреть – mikyra

+0

Исправить опечатку в вопросе названия. Переведенный URL-адрес в интерактивную ссылку. Используются фактические имена классов для ссылок на структуры данных. Некоторые незначительные исправления грамматики. –

ответ

1

Все они O(N) при использовании в нормальных условиях. (Итак, все стандартные структуры сбора данных, я думаю ...)

Конечно, это не говорит вам о некоторых важных фактах о том, сколько пространства эти структуры данных будут использовать на практике. Например:

  • ArrayList или HashMap с использованием пространства не прямо пропорционален размером списка. Оба имеют стратегию «вдвое больше, чем когда бывают полные» для некоторых или всех их использования в пространстве.

  • В лучшем случае, ArrayList использует меньше места для каждого элемента, чем LinkedList и LinkedList использует меньше места для каждого элемента, чем HashMap.

И так далее.

Это также трудно оценить худший случай ... потому что есть определенные шаблоны использования, которые могут привести к пустомуArrayList или HashMap занимающим много места. Для этих структур данных использование пространства может быть, пропорциональное максимальному значению N (до сих пор), а не текущему значению N.

  • ArrayList не удаляет пространство при удалении элементов.

  • С помощью HashMap пространство, занимаемое цепями, может расти и уменьшаться, но массив хэшей только растет.

+0

@greybeard - дерево, в котором будет 'N' узлов int total. Все узлы дерева ссылаются непосредственно на уникальный элемент дерева ... нет различий между внутренними и листовыми узлами. Примечание: мы не учитываем пространство, используемое для хранения элементов (или ключей), потому что это одинаково для всех структур данных, основанных на коллекции. –

+0

Ooops ... no TreeMap - это O (N) в пространстве. Исправить это.Благодарю. –

+0

Я думаю, что слово предупреждения о 'HashMap' после удаления в точку. С 'ArrayList' существует' trimToSize() '. – greybeard

0

Если вы проверите код для этих классов, вы увидите, что они внутренне представлены в виде массивов. Следовательно, сложность операций должна быть такой же, как и на массивах.