通过循环构造10个CPU对象并添加到泛型TreeMap中,然后分别按单价和主频降序输出(要求使用Comparable或Comparator实现排序逻辑)的Java代码
时间: 2024-12-15 07:22:24 浏览: 4
对比Java中的Comparable排序接口和Comparator比较器接口
以下是使用Java编写的示例代码,它创建了一个`CPU`类,实现了`Comparable`接口,并使用`TreeMap`按照单价和主频对CPU对象进行排序:
```java
import java.util.*;
class CPU implements Comparable<CPU> {
private String name;
private double price;
private int clockSpeed;
// 构造函数、getter和setter省略
@Override
public int compareTo(CPU other) {
if (this.price > other.price) { // 按照价格降序
return -1;
} else if (this.price < other.price) {
return 1;
} else { // 如果价格相同,则按主频升序
return Integer.compare(this.clockSpeed, other.clockSpeed);
}
}
@Override
public String toString() {
return "CPU{" +
"name='" + name + '\'' +
", price=" + price +
", clockSpeed=" + clockSpeed +
'}';
}
}
public class Main {
public static void main(String[] args) {
TreeMap<CPU, Double> cpuMap = new TreeMap<>((a, b) -> b.compareTo(a)); // 使用自定义Comparator反向排序
for (int i = 1; i <= 10; i++) {
CPU cpu = new CPU();
// 假设price和clockSpeed已经赋值
cpu.setName("CPU" + i);
cpu.setPrice(i * 100); // 价格设置为整数倍的100
cpu.setClockSpeed(i * 10); // 主频设置为整数倍的10
cpuMap.put(cpu, i * 100); // 使用CPU对象作为键,价格作为映射值
}
System.out.println("CPU List sorted by price (descending):");
for (CPU cpu : cpuMap.keySet()) {
System.out.println(cpu);
}
System.out.println("\nCPU List sorted by clock speed (ascending):");
cpuMap.entrySet().stream()
.sorted(Map.Entry.<CPU, Double>comparingByValue())
.forEach(entry -> System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue()));
}
}
```
阅读全文