in O(1) space, while the first one executes in O(n). This is the consequence of our procedural approach to data in the first script.
void transform(File in, File out) {
Collection<String> src = FileUtils.readLines(in, "UTF-8");
Collection<String> dest = new ArrayList<>(src.size());
for (String line : src) {
dest.add(line.trim());
}
FileUtils.writeLines(out, dest, "UTF-8");
}
- Твоя собака кусается? - Нет, она делает больно иначе:
void transform(File in, File out) {
try (FileReader fr = new FileReader(in), BufferedReader sr = new BufferedReader(fr), FileWriter fw = new FileWriter(fw), BufferedWriter sw = new BufferedWriter(fw)) {
String line;
while ((line = sr.readLine()) != null) {
sw.write(line);
}
}
}
да чето не очень пример то, он показывается что в первом случае не применяется никаких оптимизаций. Там вместо Collection<String> мог быть полноценный тип с lazy итератором по underlying коллекции были бы те же самые O(C) space
Обсуждают сегодня