遍历指定目录
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;
}
}