我正在创建一个类,它将接受一个数字,比方说10,并创建一个不大于10的FilesList。基本上我的程序扫描目录和子目录并获取所有文件。它不断地将最大的文件大小添加到数组列表中,所以最后,我将得到一个文件大小最大的文件的ArrayList。
但是,我不知道如何从该列表中的所有文件中获取文件大小最小的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
}
}
}
答案 0 :(得分:2)
我不会为此使用ArrayList。您需要始终对文件名集合进行排序。使用合适的比较器的TreeSet会更好。
答案 1 :(得分:0)
使用两个变量来跟踪最低值及其当前位置;每次添加新文件时都要检查新文件是否小于当前最小文件,如果是这样,请将文件大小及其位置保存为新的最小值。
或者,当您创建列表时,将其从最小到最大或从最大到最小排序,以便您始终知道最小文件的位置。
答案 2 :(得分:0)
只需循环遍历ArrayList,看看哪一个最小! (如果你保持ArrayList的排序,这会更快,但是当对象的数量相当小时,它可能没什么区别。)
fileNames.get(i).length() //returns the filesize of the i'th file in the ArrayList