Finden Sie die 3 zuletzt geänderten Dateien in einer langen Liste von Dateien

Ich habe eine Datei in der Liste, die möchte ich Sortieren und extrahieren Sie die top 3 der letzten änderung.

Einschränkung: ich kann nicht mit Java 7 aufgrund von Kompatibilitätsproblemen auf den downstream-apps

Meine aktuellen Optionen

Lösung 1

File[] files = directory.listFiles();    
Arrays.sort(files, new Comparator<File>(){
    public int compare(File f1, File f2)
    {
        return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
    } });

Lösung 2

public static void sortFilesDesc(File[] files) {
  Arrays.sort(files, new Comparator() {
    public int compare(Object o1, Object o2) {
      if ((File)o1).lastModified().compareTo((File)o2).lastModified()) {
        return -1;
      } else if (((File) o1).lastModified() < ((File) o2).lastModified()) {
        return +1;
      } else {
        return 0;
      }
    }
  });
}

Problem

Den beiden oben genannten Lösung mehr Zeit braucht, um auszuführen, & Speicher. Meine Datei Liste besteht aus rund 300 tar-Dateien mit 200MB Größe jeder. so ist es verbraucht mehr Zeit & memory.

Gibt es irgendeinen Weg, um effizient zu handhaben?

Jeder Vergleichsoperation wird ein file-Objekt, das von hohen Speicher, ist es eine Möglichkeit, den Speicher freizugeben, und behandelt diese effektiv?

  • Ich denke, dass Ihr Speicher-und timing-Probleme werden nicht durch Ihre Sortierung von 300 items (die im Speicher sind, sowieso). Vielleicht sind Sie in der Durchführung der Sortierung mehr als einmal?
  • Nope, ich bin über eine der beiden oben genannten Lösungen. was du meinst mit dem "in Erinnerung sowieso" wie kann ich klar, dass sobald die operation abgeschlossen.
  • Ein File Objekt ist nicht eine teure Objekt! Es enthält nur den Dateinamen, nicht den Inhalt der Datei. Also die Größe der Datei ist völlig irrelevant.
InformationsquelleAutor Wills | 2013-01-17
Schreibe einen Kommentar