запутанные структуры данных Java - PullRequest
3 голосов
/ 24 мая 2010

Возможно, название не подходит, но я не мог придумать ничего другого в данный момент.У меня вопрос, в чем разница между LinkedList и ArrayList или HashMap и THashMap .

Существует ли древовидная структура для Java (например, AVL, красно-черный) или сбалансированная или несбалансированная (связанный список).Если этот вопрос не подходит для SO, пожалуйста, дайте мне знать, я удалю его.спасибо

Ответы [ 4 ]

3 голосов
/ 24 мая 2010

ArrayList и LinkedList являются реализациями абстракции List. Первый содержит элементы списка во внутреннем массиве, который автоматически перераспределяется по мере необходимости, чтобы освободить место для новых элементов. Второй создает двусвязный список ячеек держателей, каждая из которых ссылается на элемент списка. Хотя соответствующие операции имеют идентичную семантику, они значительно отличаются по характеристикам производительности. Например:

  • Операция get(int) для ArrayList занимает постоянное время, но это занимает время, пропорциональное длине списка для LinkedList.

  • Удаление элемента через Iterator.remove() занимает постоянное время для LinkedList, но это занимает время, пропорциональное длине списка для ArrayList.

HashMap и THashMap - обе реализации абстракции Map, которые используют хеш-таблицы. Разница заключается в форме структуры данных хеш-таблицы, используемой в каждом случае. Класс HashMap использует закрытую адресацию , что означает, что каждый сегмент таблицы указывает на отдельный связанный список элементов. Класс THashMap использует открытую адресацию , что означает, что элементы, которые хэшируют один и тот же сегмент, хранятся в самой таблице. В итоге THashMap использует меньше памяти и быстрее, чем HashMap для большинства операций, но намного медленнее, если вам нужен набор пар ключ / значение на карте.

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

2 голосов
/ 24 мая 2010

Прочитайте API документы для классов, которые вы упомянули. Учебник коллекций также достаточно хорошо объясняет различия.

java.util.TreeMap основан на красно-черном дереве.

1 голос
/ 24 мая 2010

По поводу списков:

Оба соответствуют интерфейсу List , но их реализация отличается, и они отличаются эффективностью некоторых своих операций.

ArrayList - это список, хранящийся внутри как массив. Он имеет преимущество произвольный доступ , но добавление одного элемента не гарантируется в постоянное время. Также удаление предметов неэффективно.

LinkedList реализован как двусвязный связанный список . Он не поддерживает произвольный доступ, но удаление элемента во время его итерации является эффективным.

0 голосов
/ 24 мая 2010

Насколько я помню, оба (LinkedList и ArrayList) являются списками. Но они имеют различную внутреннюю реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...