有8个显示器,其属性有尺寸和价格。编写一个Java应用程序,使用TreeMap<K,V>,按照价格从小到达排序输出所有显示器的信息,要求通过两种方式实现:通过实现Comparator接口和通过实现Comparable接口。
时间: 2024-10-23 14:07:58 浏览: 20
TreeMap<K,V>类以及LinkedList<E>
在Java中,你可以使用`TreeMap`数据结构来存储显示器的信息,因为它默认就是按键值对的自然顺序排序(对于数值型键)。但是如果你想自定义排序规则,有两种方式可以实现:
1. **通过实现Comparator接口**:
```java
import java.util.*;
import com.google.common.collect.TreeMap;
class Monitor implements Comparable<Monitor> {
String size;
double price;
// 构造函数和 getters/setters...
@Override
public int compareTo(Monitor other) {
return Double.compare(this.price, other.price); // 按照价格比较
}
}
public class Main {
public static void main(String[] args) {
TreeMap<Monitor, Object> monitorMap = new TreeMap<>();
// 添加显示器到map
// 使用自然排序打印
for (Monitor monitor : monitorMap.values()) {
System.out.println("Size: " + monitor.size + ", Price: " + monitor.price);
}
// 或者,如果你需要按照Comparator排序
monitorMap.entrySet().stream()
.sorted(Map.Entry.comparingByValue())
.forEach(e -> System.out.println("Size: " + e.getKey().size + ", Price: " + e.getKey().price));
}
}
```
2. **通过实现Comparable接口**:
在这种情况下,你需要直接让`Monitor`类实现`Comparable`接口,并覆盖`compareTo`方法。但因为`Comparable`接口只有一个重写方法,所以我们仍然会按照价格排序。
```java
public class Monitor implements Comparable<Monitor> {
// ...
@Override
public int compareTo(Monitor other) {
return Double.compare(this.price, other.price);
}
// ...
}
// 主函数部分保持不变,只是这里不再使用Comparator
```
阅读全文