给定一个int数组,假设有10000个长度,里面放满1-100的随机整数。需要用串行循环计算和Executors框架两种方法,实现查找并输出该数组中50的出现个数。记录下程序开始和结束的时间
时间: 2024-05-12 21:20:59 浏览: 41
串行循环实现:
```java
public class SerialSearch {
public static void main(String[] args) {
int[] arr = new int[10000];
Random random = new Random();
for (int i = 0; i < arr.length; i++) {
arr[i] = random.nextInt(100) + 1; // 生成1-100的随机整数
}
int count = 0;
long startTime = System.currentTimeMillis(); // 记录开始时间
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 50) {
count++;
}
}
long endTime = System.currentTimeMillis(); // 记录结束时间
System.out.println("50出现的次数为:" + count);
System.out.println("程序执行时间为:" + (endTime - startTime) + "ms");
}
}
```
使用Executors框架实现:
```java
public class ExecutorsSearch {
public static void main(String[] args) {
int[] arr = new int[10000];
Random random = new Random();
for (int i = 0; i < arr.length; i++) {
arr[i] = random.nextInt(100) + 1; // 生成1-100的随机整数
}
int count = 0;
long startTime = System.currentTimeMillis(); // 记录开始时间
ExecutorService executorService = Executors.newFixedThreadPool(10); // 创建包含10个线程的线程池
List<Future<Integer>> futures = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
int finalI = i;
Future<Integer> future = executorService.submit(() -> arr[finalI] == 50 ? 1 : 0); // 用线程池异步执行任务
futures.add(future);
}
for (Future<Integer> future : futures) {
try {
count += future.get(); // 获取任务的结果并累加
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
executorService.shutdown(); // 关闭线程池
long endTime = System.currentTimeMillis(); // 记录结束时间
System.out.println("50出现的次数为:" + count);
System.out.println("程序执行时间为:" + (endTime - startTime) + "ms");
}
}
```
阅读全文