В чем разница между потоками и коллекциями в Java 8 [закрыто]

Я изучаю потоки в Java 8. Я запутался в этой концепции:

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

Я не понимаю. как может коллекция только удерживать значения, которые должны быть вычислены до их добавления в коллекцию? А также, что подразумевается под сравнением потока с фиксированной структурой данных?

1 ответов


вы не указали источник вашей цитаты, поэтому позвольте мне процитировать javadoc для вас:

потоки отличаются от коллекций несколькими способами:

  • хранение. Поток не является структурой данных, которая хранит элементы; вместо этого он передает элементы из источника, такого как структура данных, массив, функция генератора или канал ввода-вывода, через конвейер вычислительных операций.
  • функциональный характер. Операция над потоком дает результат, но не изменяет его источник. Например, фильтрация Stream полученный из коллекции производит новый Stream без отфильтрованных элементов вместо удаления элементов из исходной коллекции.
  • лень-ищет. Многие операции потока, такие как фильтрация, сопоставление или удаление дубликатов, могут быть реализованы лениво, открывая возможности для оптимизации. Например, " найти первый String С тремя последовательными гласными " не нужно проверять все входные строки. Операции потока разделяются на промежуточные (Stream-производить) деятельности и терминальные (значение - или побочный эффект-производить) деятельности. Промежуточные операции всегда ленивы.
  • возможно, неограниченная. Хотя коллекции имеют конечный размер, потоки в этом не нуждаются. Операции короткого замыкания, такие как limit(n) или findFirst() можно разрешить вычисления на бесконечном потоки для завершения в конечное время.
  • плавящимся. Элементы потока посещаются только один раз в течение жизни потока. Как Iterator, новый поток должен быть создан, чтобы вернуться к тем же элементам источника.

напротив, a Collection это контейнер объектов (элементов). Вы не можете получить (получить) объект из коллекции, если объект ранее не был добавлен в коллекция.