В чем разница между потоками и коллекциями в Java 8 [закрыто]
Я изучаю потоки в Java 8. Я запутался в этой концепции:
коллекция-это структура данных в памяти, которая содержит все значения, которые в настоящее время имеет структура данных-каждый элемент в коллекции должен быть вычислен, прежде чем его можно будет добавить в коллекцию. Напротив, поток-это концептуально фиксированная структура данных, в которой элементы вычисляются по требованию.
Я не понимаю. как может коллекция только удерживать значения, которые должны быть вычислены до их добавления в коллекцию? А также, что подразумевается под сравнением потока с фиксированной структурой данных?
1 ответов
вы не указали источник вашей цитаты, поэтому позвольте мне процитировать javadoc для вас:
потоки отличаются от коллекций несколькими способами:
- хранение. Поток не является структурой данных, которая хранит элементы; вместо этого он передает элементы из источника, такого как структура данных, массив, функция генератора или канал ввода-вывода, через конвейер вычислительных операций.
- функциональный характер. Операция над потоком дает результат, но не изменяет его источник. Например, фильтрация
Stream
полученный из коллекции производит новыйStream
без отфильтрованных элементов вместо удаления элементов из исходной коллекции.- лень-ищет. Многие операции потока, такие как фильтрация, сопоставление или удаление дубликатов, могут быть реализованы лениво, открывая возможности для оптимизации. Например, " найти первый
String
С тремя последовательными гласными " не нужно проверять все входные строки. Операции потока разделяются на промежуточные (Stream
-производить) деятельности и терминальные (значение - или побочный эффект-производить) деятельности. Промежуточные операции всегда ленивы.- возможно, неограниченная. Хотя коллекции имеют конечный размер, потоки в этом не нуждаются. Операции короткого замыкания, такие как
limit(n)
илиfindFirst()
можно разрешить вычисления на бесконечном потоки для завершения в конечное время.- плавящимся. Элементы потока посещаются только один раз в течение жизни потока. Как
Iterator
, новый поток должен быть создан, чтобы вернуться к тем же элементам источника.
напротив, a Collection
это контейнер объектов (элементов). Вы не можете получить (получить) объект из коллекции, если объект ранее не был добавлен в коллекция.