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
Обсуждают сегодня