2013-12-10 49 views
-1

我正在创建一个类,它将接受一个数字,比如10,并创建一个不超过10个文件的ArrayList。基本上,我的程序扫描一个目录和子目录,获取所有文件。它不断地将最大的文件添加到数组列表中,所以最后我会得到一个文件大小最大的文件的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。您需要随时对文件名称集合进行排序。一个TreeSet和一个合适的比较器会更好。

0

使用两个变量来跟踪最低值及其当前位置;每次添加新文件时都要进行检查,以确定新文件是否小于当前最小文件,如果是这样,请将文件大小及其位置保存为新的最小值。

或者为你创建列表排序从最小到最大或最大到最小,让你随时知道最小的文件的位置。

0

只需遍历ArrayList并查看哪一个最小! (如果你保持ArrayList的排序,这会更快,但当对象的数量相当小时,它可能没有太大的区别)。

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