2013-12-10 4 views
-1

숫자가 10 인 클래스를 만들고 파일의 ArrayList를 10 이하로 만듭니다. 기본적으로 프로그램은 디렉토리와 하위 디렉토리를 스캔하고 모든 파일을 가져옵니다. 배열 목록에 크기가 가장 큰 파일을 계속 추가하므로 결국에는 파일 크기가 가장 큰 파일의 ArrayList를 갖게됩니다.Java - 배열 목록을 파일 크기로 정렬

그러나 목록에있는 모든 파일 중에서 가장 작은 파일 크기를 가진 ArrayList 요소를 얻는 방법을 모르겠습니다. ArrayList가 완전히 채워진 경우 다음을 확인해야합니다. 다음 파일의 크기가 목록의 가장 작은 파일보다 크면 목록에서 해당 파일을 삭제하고 더 큰 파일을 추가해야합니다. 그렇다면 ArrayList에서 가장 작은 파일을 어떻게 검색합니까?

package pkgfinal; 

import java.io.File; 
import java.util.ArrayList; 

/** 
* 
* @author Sameer Anand 
* 
*/ 

public class TopN { 

    ArrayList<File> fileNames; 

    int numberOfObjects; 

    public TopN(int numberOfObjects) { 

     numberOfObjects = this.numberOfObjects; 

     fileNames = new ArrayList<>(numberOfObjects); 

    } 

    public void add(File f) { 

     // Add The File To The Array List 

     // If The List is Not Fully Populated, Add The File To The List 

     // Otherwise, Check The Length of The File Coming In. 
     // If The Length of The File Coming In Is Greater Than The Size 
     // Of The Smallest File In The List, Delete The Old File & Add 
     // in The New File 

     if (fileNames.size() < numberOfObjects) { 

      fileNames.add(f); 

     } else { 

      // Do The Check 

     } 

    } 

} 

답변

2

이 경우 ArrayList를 사용하지 않습니다. 항상 파일 이름 모음을 정렬해야합니다. 적절한 Comparator를 가지는 TreeSet가 좋을 것입니다.

0

두 개의 변수를 사용하여 가장 낮은 값과 현재 위치를 추적합니다. 새 파일을 추가 할 때마다 새 파일이 현재 가장 작은 파일보다 작은 지 확인하십시오. 그렇다면 파일의 크기와 위치를 새 최소값으로 저장하십시오.

또는 목록을 만들 때 가장 작은 파일부터 가장 큰 파일 또는 가장 큰 파일을 정렬하여 가장 작은 파일의 위치를 ​​항상 알 수 있습니다.

0

ArrayList를 반복하면서 어느 것이 가장 작은 지 확인하십시오! (ArrayList를 정렬 한 채로두면 더 빠를 것입니다. 그러나 객체 수가 상당히 적은 경우에는 별다른 차이가 없습니다.)

fileNames.get(i).length() //returns the filesize of the i'th file in the ArrayList