遍历指定目录

package com.m.suan_pai;


import java.io.File;
import java.util.Stack;

public class ConsistentHashing {

    public static void main(String[] args) {
        File root = new File("D:\\Program Files");
        long startTime = System.currentTimeMillis();
        int sum = 0;
        if (root.exists()) {
            System.out.println("文件存在");
            for (int i = 0; i < 10; i++) {
                sum += getFileNums(root);
            }
            System.out.println("文件数:" + sum);
        }
        System.out.println("耗时:" + (System.currentTimeMillis() - startTime));
    }

    public static int getFileNums(File root) {
        if (!root.isFile() && !root.isDirectory()) {
            return 0;
        }
        if (root.isFile()) {
            return 1;
        }
        int files = 0;
        Stack<File> stack = new Stack<>();
        stack.add(root);
        while (!stack.isEmpty()) {
            File folder = stack.pop();
            for (File file : folder.listFiles()) {
                if (file.isDirectory()) {
                    stack.add(file);
                }

                if (file.isFile()) {
                    files++;
                }
            }
        }
        return files;
    }


}




压栈快排

package com.m.suan_pai;

import java.util.Arrays;
import java.util.Stack;

public class Test2 {

    public static void main(String[] args) {
        int[] arr = {1, 3, -5, 7, -9, -8, -4, -3, -777};
        long startTime = System.currentTimeMillis();
        fun1(arr, 0, arr.length - 1);
        System.out.println("耗时:" + (System.currentTimeMillis() - startTime));
        System.out.println(Arrays.toString(arr));
    }

    public static void fun1(int[] arr, int left, int right) {
        Stack<Integer> stack = new Stack<Integer>();
        if (left < right) {
            stack.add(left);
            stack.add(right);
            while (!stack.isEmpty()) {
                int ri = stack.pop();
                int le = stack.pop();
                int k = partition1(arr, le, ri);
                if (le < k - 1) {
                    stack.push(le);
                    stack.push(k - 1);
                }
                if (ri > k + 1) {
                    stack.push(k + 1);
                    stack.push(ri);//这样,最后入栈的就是key右边的部分,则下一次循环先处理key右边的部分
                }

            }
        }
    }

    public static int partition1(int[] arr, int left, int right) {
        int k = arr[left];
        while (left < right) {
            while (left < right && arr[right] >= k) {
                right--;
            }
            arr[left] = arr[right];
            while (left < right && arr[left] <= k) {
                left++;
            }
            arr[right] = arr[left];
        }
        arr[left] = k;
        return left;
    }

}