Java - 按文件大小排序数组列表

时间:2013-12-10 00:33:57

标签: java arrays arraylist

我正在创建一个类,它将接受一个数字,比方说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

        }

    }

}

3 个答案:

答案 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