Для чего нужен linkedlist
Структуры данных в картинках. LinkedList
Приветствую вас, хабражители!
Продолжаю начатое, а именно, пытаюсь рассказать (с применением визуальных образов) о том как реализованы некоторые структуры данных в Java.
В прошлый раз мы говорили об ArrayList, сегодня присматриваемся к LinkedList.
LinkedList — реализует интерфейс List. Является представителем двунаправленного списка, где каждый элемент структуры содержит указатели на предыдущий и следующий элементы. Итератор поддерживает обход в обе стороны. Реализует методы получения, удаления и вставки в начало, середину и конец списка. Позволяет добавлять любые элементы в том числе и null.
Создание объекта
Footprint
Object size: 48 bytes
Только что созданный объект list, содержит свойства header и size.
header — псевдо-элемент списка. Его значение всегда равно null, a свойства next и prev всегда указывают на первый и последний элемент списка соответственно. Так как на данный момент список еще пуст, свойства next и prev указывают сами на себя (т.е. на элемент header). Размер списка size равен 0.
Добавление элементов
Footprint
Object size: 112 bytes
Добавление элемента в конец списка с помощью методом add(value), addLast(value)
и добавление в начало списка с помощью addFirst(value) выполняется за время O(1).
Внутри класса LinkedList существует static inner класс Entry, с помощью которого создаются новые элементы.
Каждый раз при добавлении нового элемента, по сути выполняется два шага:
1) создается новый новый экземпляр класса Entry
2) переопределяются указатели на предыдущий и следующий элемент
Добавим еще один элемент
Добавление элементов в «середину» списка
Для того чтобы добавить элемент на определенную позицию в списке, необходимо вызвать метод add(index, value). Отличие от add(value) состоит в определении элемента перед которым будет производиться вставка
Метод entry(index) пробегает по всему списку в поисках элемента с указанным индексом. Направление обхода определяется условием (index > 1)). По факту получается что для нахождения нужного элемента перебирается не больше половины списка, но с точки зрения асимптотического анализа время на поиск растет линейно — O(n).
Как видно, разработчик может словить IndexOutOfBoundsException, если указанный индекс окажется отрицательным или большим текущего значения size. Это справедливо для всех методов где в параметрах фигурирует индекс.
Удаление элементов
Удалять элементы из списка можно несколькими способами:
— из начала или конца списка с помощью removeFirst(), removeLast() за время O(1);
— по индексу remove(index) и по значению remove(value) за время O(n).
Рассмотрим удаление по значению
Footprint
Object size: 176 bytes
Внутри метода remove(value) просматриваются все элементы списка в поисках нужного. Удален будет лишь первый найденный элемент.
В общем, удаление из списка можно условно разбить на 3 шага:
1) поиск первого элемента с соответствующим значением
2) переопределяются указатели на предыдущий и следующий элемент
3) удаление указателей на другие элементы и предание забвению самого элемента
Итераторы
Для собственноручного перебора элементов можно воспользоваться «встроенным» итератором. Сильно углубляться не буду, процессы протекающие внутри, очень похожи на то что описано выше.
Приведенный выше код поместит указатель в начало списка. Так же можно начать перебор элементов с определенного места, для этого нужно передать индекс в метод listIterator(index). В случае, если необходимо начать обход с конца списка, можно воспользоваться методом descendingIterator().
Стоит помнить, что ListIterator свалится с ConcurrentModificationException, если после создания итератора, список был изменен не через собственные методы итератора.
Ну и на всякий случай примитивный пример перебора элементов:
Итоги
— Из LinkedList можно организовать стэк, очередь, или двойную очередь, со временем доступа O(1);
— На вставку и удаление из середины списка, получение элемента по индексу или значению потребуется линейное время O(n). Однако, на добавление и удаление из середины списка, используя ListIterator.add() и ListIterator.remove(), потребуется O(1);
— Позволяет добавлять любые значения в том числе и null. Для хранения примитивных типов использует соответствующие классы-оберки;
— Не синхронизирован.
Ссылки
Объем занимаемой памяти измерялся с помощью инструмента memory-measurer. Для его использования также понадобится Guava (Google Core Libraries).
Когда мне следует использовать список против LinkedList
ОТВЕТЫ
Ответ 1
Изменить
Прочтите комментарии к этому ответу. Люди утверждают, что я не делал надлежащие тесты. Я согласен, что это не должно быть приемлемым ответом. Как я был Я провела несколько тестов и почувствовала, как их разделять.
Оригинальный ответ.
Я нашел интересные результаты:
Связанный список (3,9 секунды)
Список (2,4 секунды)
Даже если вы только получаете доступ к данным, он значительно медленнее! Я говорю, никогда не используйте связанный список.
Вот еще одно сравнение, выполняющее множество вставок (мы планируем вставить элемент в середине списка)
Связанный список (51 секунда)
Список (7.26 секунд)
Связанный список со ссылкой на место, где нужно вставить (0,04 секунды)
Итак, только если вы планируете вставлять несколько элементов, а также, где-то есть ссылка, где вы планируете вставить элемент, а затем использовать связанный список. Просто потому, что вам нужно вставить множество элементов, это не ускоряет работу, поскольку поиск места, в который вы хотите вставить, требует времени.
Ответ 2
В большинстве случаев List более полезен. LinkedList будет иметь меньшую стоимость при добавлении/удалении элементов в середине списка, тогда как List может только дешево добавить/удалить в конце списка.
Ответ 3
Связанные списки могут быть связаны по отдельности или дважды связаны. Это относится к тому, имеет ли каждый элемент в цепочке ссылку только на следующую (односвязную) или на оба предшествующих/следующих элемента (дважды связанную). LinkedList имеет двойную связь.
Внутренне, List поддерживается массивом. Это обеспечивает очень компактное представление в памяти. И наоборот, LinkedList включает дополнительную память для хранения двунаправленных ссылок между последовательными элементами. Таким образом, размер памяти LinkedList обычно будет больше, чем для List (с оговоркой, что List может иметь неиспользуемые внутренние элементы массива для повышения производительности во время операций добавления).
У них также разные характеристики:
Append
Prepend
Вставка
Удаление
Count
Содержит
Очистить
Как вы можете видеть, они в основном эквивалентны. На практике API LinkedList является более громоздким в использовании, и детали его внутренних потребностей выходят в ваш код.
Однако, если вам нужно сделать много вложений/абстракций из списка, он предлагает постоянное время. List предлагает линейное время, так как дополнительные элементы в списке должны быть перемешаны после вставки/удаления.
Ответ 4
Связанные списки обеспечивают очень быструю вставку или удаление члена списка. Каждый член в связанном списке содержит указатель на следующий член в списке, чтобы вставить элемент в позицию i:
Недостатком связанного списка является то, что случайный доступ невозможен. Доступ к члену требует прохождения списка до тех пор, пока не будет найден нужный элемент.
Ответ 5
Ключевое различие возникает, когда производительность имеет значение. Например, если вы реализуете список с тяжелой операцией «INSERT», LinkedList превосходит List. Поскольку LinkedList может сделать это в O (1) раз, но List может потребоваться расширить размер базового массива. Для получения дополнительной информации/подробностей вам может потребоваться ознакомиться с алгоритмической разницей между LinkedList и структурами данных массива. http://en.wikipedia.org/wiki/Linked_list и Array
Надеюсь на эту помощь,
Ответ 6
Основным преимуществом связанных списков по массивам является то, что ссылки предоставляют нам возможность эффективно перестраивать элементы. Sedgewick, p. 91
Ответ 7
Мой предыдущий ответ был недостаточно точным. Как это было ужасно: D Но теперь я могу опубликовать гораздо более полезный и правильный ответ.
Я сделал несколько дополнительных тестов. Вы можете найти его источник по следующей ссылке и переустановить его в своей среде по своему усмотрению: https://github.com/ukushu/DataStructuresTestsAndOther.git
Короткие результаты:
Массив должен использовать:
Ответ 8
Общим для использования LinkedList является следующее:
Предположим, вы хотите удалить многие строки из списка строк большого размера, скажем, 100 000. Строки для удаления можно найти в HashSet dic, и, как считается, список строк содержит от 30 000 до 60 000 таких строк для удаления.
Тогда какой лучший тип списка для хранения 100 000 строк? Ответ: LinkedList. Если они хранятся в ArrayList, то итерация по ней и удаление совпадающих строк, которые будут занимать к миллиардам операций, тогда как требуется около 100 000 операций с использованием итератора и метода remove().
Ответ 9
Если вам нужен встроенный индексированный доступ, сортировка (и после этого двоичного поиска) и метод ToArray(), вы должны использовать List.
Ответ 10
Это адаптировано из Tono Nam, принявшего ответ, исправляющий несколько неправильных измерений в нем.
Ответ 11
Ответ 12
Здесь так много средних ответов.
В некоторых реализациях связанных списков используются базовые блоки предварительно выделенных узлов. Если они этого не делают, то постоянное время/линейное время менее важно, так как производительность памяти будет плохой, а производительность кэша еще хуже.
Используйте связанные списки, когда
1) Вам нужна безопасность потоков. Вы можете создавать улучшенные поточные альги. Затраты на блокировку будут доминировать в параллельном списке стилей.
2) Если у вас большая структура, похожая на очередь, и вы хотите удалить или добавить где угодно, кроме конца все время. > 100K-списки существуют, но не так распространены.
Ответ 13
Я спросил аналогичный вопрос, связанный с производительностью коллекции LinkedList, и обнаружил Стивен Клири Реализация С# для Deque была решением. В отличие от коллекции Queue, Deque позволяет перемещать элементы взад и вперед спереди и сзади. Он похож на связанный список, но с улучшенной производительностью.
Linked List Класс
Определение
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет двунаправленный список.
Параметры типа
Указывает тип элементов связанного списка.
Примеры
В следующем примере кода показано множество функций LinkedList класса.
Комментарии
Можно удалить узлы и повторно вставить их либо в том же списке, либо в другом списке, что приведет к тому, что в куче не будут выделены дополнительные объекты. Так как список также поддерживает внутреннее количество, получение этого Count свойства является операцией O (1).
Списки, содержащие ссылочные типы, работают лучше, когда узел и его значение создаются одновременно. LinkedList принимает null как допустимое Value свойство для ссылочных типов и допускает дублирование значений.
LinkedList Класс не поддерживает цепочки, разделение, циклы и другие функции, которые могут выходить из списка в нестабильном состоянии. Список остается единообразным в одном потоке. Единственный многопоточный сценарий, поддерживаемый, LinkedList — это многопоточные операции чтения.
Конструкторы
Свойства
Методы
Копирует целый массив LinkedList в совместимый одномерный массив Array, начиная с заданного индекса целевого массива.
Определяет, равен ли указанный объект текущему объекту.
Находит первый узел, содержащий указанное значение.
Находит последний узел, содержащий указанное значение.
Служит хэш-функцией по умолчанию.
Возвращает объект Type для текущего экземпляра.
Создает неполную копию текущего объекта Object.
Реализует интерфейс ISerializable и вызывает событие десериализации при завершении десериализации.
Возвращает строку, представляющую текущий объект.
Явные реализации интерфейса
Копирует элементы коллекции ICollection в массив Array, начиная с указанного индекса массива Array.
Возвращает значение, показывающее, является ли доступ к коллекции ICollection синхронизированным (потокобезопасным).
Получает объект, с помощью которого можно синхронизировать доступ к коллекции ICollection.
Получает значение, указывающее, является ли объект ICollection доступным только для чтения.
Возвращает перечислитель, выполняющий перебор элементов связанного списка как коллекции.
Возвращает перечислитель, который осуществляет итерацию по коллекции.
Методы расширения
Создает неизменяемый массив на основе указанной коллекции.
Создает неизменяемый словарь на основе существующей коллекции элементов, применяя функцию преобразования к исходным ключам.
Создает неизменяемый словарь на основе последовательности, подвергнутой определенному преобразованию.
Выполняет перечисление и преобразование последовательности и создает неизменяемый словарь на основе ее содержимого.
Выполняет перечисление и преобразование последовательности и создает на основе ее содержимого неизменяемый словарь с использованием указанной функции сравнения ключей.
Выполняет перечисление и преобразование последовательности и создает на основе ее содержимого неизменяемый словарь с использованием указанных функций сравнения ключей и значений.
Выполняет перечисление последовательности и создает неизменяемый набор хэширования на основе ее содержимого.
Выполняет перечисление последовательности, создает неизменяемый набор хэширования на основе ее содержимого и использует указанную функцию сравнения для типа набора.
Выполняет перечисление последовательности и создает неизменяемый список на основе ее содержимого.
Выполняет перечисление и преобразование последовательности и создает неизменяемый отсортированный словарь на основе ее содержимого.
Выполняет перечисление и преобразование последовательности и создает на основе ее содержимого неизменяемый отсортированный словарь с использованием указанной функции сравнения ключей.
Выполняет перечисление и преобразование последовательности и создает на основе ее содержимого неизменяемый отсортированный словарь с использованием указанных функций сравнения ключей и значений.
Выполняет перечисление последовательности и создает неизменяемый отсортированный набор на основе ее содержимого.
Выполняет перечисление последовательности, создает неизменяемый отсортированный набор на основе ее содержимого и использует указанную функцию сравнения.
Применяет к последовательности агрегатную функцию.
Применяет к последовательности агрегатную функцию. Указанное начальное значение используется в качестве исходного значения агрегатной операции.
Применяет к последовательности агрегатную функцию. Указанное начальное значение служит исходным значением для агрегатной операции, а указанная функция используется для выбора результирующего значения.
Проверяет, все ли элементы последовательности удовлетворяют условию.
Проверяет, содержит ли последовательность какие-либо элементы.
Проверяет, удовлетворяет ли какой-либо элемент последовательности заданному условию.
Добавляет значение в конец последовательности.
Вычисляет среднее для последовательности значений типа Decimal, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет среднее для последовательности значений типа Double, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет среднее для последовательности значений типа Int32, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет среднее для последовательности значений типа Int64, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет среднее для последовательности значений Decimal обнуляемого типа, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет среднее для последовательности значений Double обнуляемого типа, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет среднее для последовательности значений Int32 обнуляемого типа, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет среднее для последовательности значений Int64 обнуляемого типа, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет среднее для последовательности значений Single обнуляемого типа, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет среднее для последовательности значений типа Single, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Приводит элементы объекта IEnumerable к заданному типу.
Объединяет две последовательности.
Определяет, содержится ли указанный элемент в последовательности, используя компаратор проверки на равенство по умолчанию.
Возвращает количество элементов в последовательности.
Возвращает число, представляющее количество элементов последовательности, удовлетворяющих заданному условию.
Возвращает элементы указанной последовательности или одноэлементную коллекцию, содержащую значение параметра типа по умолчанию, если последовательность пуста.
Возвращает элементы указанной последовательности или одноэлементную коллекцию, содержащую указанное значение, если последовательность пуста.
Возвращает различающиеся элементы последовательности, используя для сравнения значений компаратор проверки на равенство по умолчанию.
Возвращает различные элементы из последовательности в соответствии с заданной функцией выбора ключа.
Возвращает различные элементы из последовательности в соответствии с заданной функцией выбора ключа.
Возвращает элемент по указанному индексу в последовательности.
Возвращает элемент по указанному индексу в последовательности.
Возвращает элемент последовательности по указанному индексу или значение по умолчанию, если индекс вне допустимого диапазона.
Возвращает элемент последовательности по указанному индексу или значение по умолчанию, если индекс вне допустимого диапазона.
Находит разность множеств, представленных двумя последовательностями, используя для сравнения значений компаратор проверки на равенство по умолчанию.
Формирует разность множества двух последовательностей в соответствии с заданной функцией выбора ключа.
Формирует разность множества двух последовательностей в соответствии с заданной функцией выбора ключа.
Возвращает первый элемент последовательности.
Возвращает первый элемент последовательности, удовлетворяющий указанному условию.
Возвращает первый элемент последовательности или значение по умолчанию, если последовательность не содержит элементов.
Возвращает первый элемент последовательности или значение по умолчанию, если последовательность не содержит элементов.
Возвращает первый элемент последовательности, удовлетворяющий указанному условию, или значение по умолчанию, если ни одного такого элемента не найдено.
Возвращает первый элемент последовательности, удовлетворяющий указанному условию, или значение по умолчанию, если ни одного такого элемента не найдено.
Группирует элементы последовательности в соответствии с заданной функцией селектора ключа.
Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и сравнивает ключи с помощью указанного компаратора.
Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и проецирует элементы каждой группы с помощью указанной функции.
Группирует элементы последовательности в соответствии с функцией селектора ключа. Ключи сравниваются с помощью компаратора, элементы каждой группы проецируются с помощью указанной функции.
Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа.
Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа. Ключи сравниваются с использованием заданного компаратора.
Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа. Элементы каждой группы проецируются с помощью указанной функции.
Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа. Значения ключей сравниваются с помощью указанного компаратора, элементы каждой группы проецируются с помощью указанной функции.
Устанавливает корреляцию между элементами двух последовательностей на основе равенства ключей и группирует результаты. Для сравнения ключей используется компаратор проверки на равенство по умолчанию.
Находит пересечение множеств, представленных двумя последовательностями, используя для сравнения значений компаратор проверки на равенство по умолчанию.
Создает пересечение множеств двух последовательностей в соответствии с заданной функцией выбора ключа.
Создает пересечение множеств двух последовательностей в соответствии с заданной функцией выбора ключа.
Устанавливает корреляцию между элементами двух последовательностей на основе сопоставления ключей. Для сравнения ключей используется компаратор проверки на равенство по умолчанию.
Возвращает последний элемент последовательности.
Возвращает последний элемент последовательности, удовлетворяющий указанному условию.
Возвращает последний элемент последовательности или значение по умолчанию, если последовательность не содержит элементов.
Возвращает последний элемент последовательности или значение по умолчанию, если последовательность не содержит элементов.
Возвращает последний элемент последовательности, удовлетворяющий указанному условию, или значение по умолчанию, если ни одного такого элемента не найдено.
Возвращает последний элемент последовательности, удовлетворяющий указанному условию, или значение по умолчанию, если ни одного такого элемента не найдено.
Возвращает значение типа Int64, представляющее общее число элементов в последовательности.
Возвращает значение типа Int64, представляющее число элементов последовательности, удовлетворяющих заданному условию.
Возвращает максимальное значение, содержащееся в универсальной последовательности.
Возвращает максимальное значение, содержащееся в универсальной последовательности.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает максимальное значение типа Decimal.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает максимальное значение типа Double.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает максимальное значение типа Int32.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает максимальное значение типа Int64.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает максимальное значение Decimal обнуляемого типа.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает максимальное значение Double обнуляемого типа.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает максимальное значение Int32 обнуляемого типа.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает максимальное значение Int64 обнуляемого типа.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает максимальное значение Single обнуляемого типа.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает максимальное значение типа Single.
Вызывает функцию преобразования для каждого элемента универсальной последовательности и возвращает максимальное результирующее значение.
Возвращает максимальное значение в универсальной последовательности в соответствии с заданной функцией выбора ключа.
Возвращает максимальное значение в универсальной последовательности в соответствии с заданной функцией выбора ключа.
Возвращает минимальное значение, содержащееся в универсальной последовательности.
Возвращает минимальное значение, содержащееся в универсальной последовательности.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает минимальное значение типа Decimal.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает минимальное значение типа Double.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает минимальное значение типа Int32.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает минимальное значение типа Int64.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает минимальное значение Decimal обнуляемого типа.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает минимальное значение Double обнуляемого типа.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает минимальное значение Int32 обнуляемого типа.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает минимальное значение Int64 обнуляемого типа.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает минимальное значение Single обнуляемого типа.
Вызывает функцию преобразования для каждого элемента последовательности и возвращает минимальное значение типа Single.
Вызывает функцию преобразования для каждого элемента универсальной последовательности и возвращает минимальное результирующее значение.
Возвращает минимальное значение в универсальной последовательности в соответствии с заданной функцией выбора ключа.
Возвращает минимальное значение в универсальной последовательности в соответствии с заданной функцией выбора ключа.
Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.
Сортирует элементы последовательности в порядке возрастания ключа.
Сортирует элементы последовательности в порядке возрастания с использованием указанного компаратора.
Сортирует элементы последовательности в порядке убывания ключа.
Сортирует элементы последовательности в порядке убывания с использованием указанного компаратора.
Добавляет значение в начало последовательности.
Изменяет порядок элементов последовательности на противоположный.
Проецирует каждый элемент последовательности в новую форму.
Проецирует каждый элемент последовательности в новую форму, добавляя индекс элемента.
Проецирует каждый элемент последовательности в объект IEnumerable и объединяет результирующие последовательности в одну последовательность.
Проецирует каждый элемент последовательности в объект IEnumerable и объединяет результирующие последовательности в одну последовательность. Индекс каждого элемента исходной последовательности используется в проецированной форме этого элемента.
Определяет, совпадают ли две последовательности, используя для сравнения элементов компаратор проверки на равенство по умолчанию, предназначенный для их типа.
Возвращает единственный элемент последовательности и генерирует исключение, если число элементов последовательности отлично от 1.
Возвращает единственный элемент последовательности, удовлетворяющий указанному условию, и вызывает исключение, если таких элементов больше одного.
Возвращает единственный элемент последовательности или значение по умолчанию, если последовательность пуста; если в последовательности более одного элемента, генерируется исключение.
Возвращает единственный элемент последовательности или значение по умолчанию, если последовательность пуста; если в последовательности более одного элемента, генерируется исключение.
Возвращает единственный элемент последовательности, удовлетворяющий указанному условию, или значение по умолчанию, если такого элемента не существует; если условию удовлетворяет более одного элемента, вызывается исключение.
Возвращает единственный элемент последовательности, удовлетворяющий указанному условию, или значение по умолчанию, если такого элемента не существует; если условию удовлетворяет более одного элемента, вызывается исключение.
Пропускает заданное число элементов в последовательности и возвращает остальные элементы.
Возвращает новую перечислимую коллекцию, содержащую элементы из source с исключенными count элементами из конца исходной коллекции.
Пропускает элементы в последовательности, пока они удовлетворяют заданному условию, и затем возвращает оставшиеся элементы.
Пропускает элементы в последовательности, пока они удовлетворяют заданному условию, и затем возвращает оставшиеся элементы. Индекс элемента используется в логике функции предиката.
Вычисляет сумму последовательности значений типа Decimal, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет сумму последовательности значений типа Double, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет сумму последовательности значений типа Int32, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет сумму последовательности значений типа Int64, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет сумму последовательности значений Decimal обнуляемого типа, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет сумму последовательности значений Double обнуляемого типа, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет сумму последовательности значений Int32 обнуляемого типа, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет сумму последовательности значений Int64 обнуляемого типа, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет сумму последовательности значений Single обнуляемого типа, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Вычисляет сумму последовательности значений типа Single, получаемой в результате применения функции преобразования к каждому элементу входной последовательности.
Возвращает указанное число подряд идущих элементов с начала последовательности.
Возвращает указанный диапазон смежных элементов из последовательности.
Возвращает цепочку элементов последовательности, удовлетворяющих указанному условию.
Возвращает цепочку элементов последовательности, удовлетворяющих указанному условию. Индекс элемента используется в логике функции предиката.
Создает словарь Dictionary из объекта IEnumerable в соответствии с заданной функцией селектора ключа.
Создает словарь Dictionary из объекта IEnumerable в соответствии с заданной функцией селектора ключа и компаратором ключей.
Создает словарь Dictionary из объекта IEnumerable в соответствии с заданными функциями селектора ключа и селектора элемента.
Создает словарь Dictionary из объекта IEnumerable в соответствии с заданным компаратором и функциями селектора ключа и селектора элемента.
Создает HashSet из IEnumerable с использованием comparer для сравнения ключей.
Создает словарь Lookup из объекта IEnumerable в соответствии с заданной функцией селектора ключа.
Создает словарь Lookup из объекта IEnumerable в соответствии с заданной функцией селектора ключа и компаратором ключей.
Создает словарь Lookup из объекта IEnumerable в соответствии с заданными функциями селектора ключа и селектора элемента.
Создает объект Lookup из объекта IEnumerable в соответствии с заданным компаратором и функциями селектора ключа и селектора элемента.
Пытается определить количество элементов в последовательности без принудительного перечисления.
Находит объединение множеств, представленных двумя последовательностями, используя для сравнения значений компаратор проверки на равенство по умолчанию.
Создает объединение множеств двух последовательностей в соответствии с заданной функцией выбора ключа.
Создает объединение множеств двух последовательностей в соответствии с заданной функцией выбора ключа.
Выполняет фильтрацию последовательности значений на основе заданного предиката.
Выполняет фильтрацию последовательности значений на основе заданного предиката. Индекс каждого элемента используется в логике функции предиката.
Создает последовательность кортежей с элементами из двух указанных последовательностей.
Создает последовательность кортежей с элементами из трех указанных последовательностей.
Применяет указанную функцию к соответствующим элементам двух последовательностей, что дает последовательность результатов.
Позволяет осуществлять параллельный запрос.
Позволяет осуществлять параллельный запрос.
Преобразовывает коллекцию IEnumerable в объект IQueryable.
Возвращает коллекцию элементов, содержащую предков каждого узла в исходной коллекции.
Возвращает отфильтрованную коллекцию элементов, содержащую предков каждого узла в исходной коллекции. В коллекцию включаются только элементы, соответствующие XName.
Возвращает коллекцию подчиненных узлов каждого документа и элемента в исходной коллекции.
Возвращает коллекцию элементов, содержащую подчиненные элементы каждого элемента и документа в исходной коллекции.
Возвращает отфильтрованную коллекцию элементов, содержащую подчиненные элементы каждого элемента и документа в исходной коллекции. В коллекцию включаются только элементы, соответствующие XName.
Возвращает коллекцию дочерних элементов каждого элемента и документа в исходной коллекции.
Возвращает отфильтрованную коллекцию дочерних элементов каждого элемента и документа в исходной коллекции. В коллекцию включаются только элементы, соответствующие XName.
Возвращает коллекцию узлов, содержащую все узлы в исходной коллекции, отсортированные в порядке следования документов.
Возвращает коллекцию дочерних узлов каждого документа и элемента в исходной коллекции.
Удаление каждого узла в исходной коллекции из родительского узла.
Применяется к
Потокобезопасность
Этот тип не потокобезопасен. Если LinkedList доступ к необходим нескольким потокам, необходимо реализовать собственный механизм синхронизации.
LinkedList Может поддерживать одновременно несколько модулей чтения, если коллекция не изменяется. Даже поэтому перечисление по коллекции не является потокобезопасной процедурой. В редких случаях, когда перечисление планируется с доступом на запись, коллекция должна быть заблокирована во время всего перечисления. Чтобы разрешить доступ к коллекции из нескольких потоков для чтения и записи, необходимо реализовать собственную синхронизацию.