MST

星途 面试题库

面试题:Java中TreeMap如何按自定义规则对键进行排序并在项目场景应用

假设在一个电商项目中,需要对商品按照价格升序存储在TreeMap中以便快速查找价格区间内的商品。请简述如何利用TreeMap的排序功能实现此需求,同时写出关键的Java代码片段。
26.8万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 利用TreeMap排序功能实现需求简述
    • TreeMap是基于红黑树实现的,它会根据键的自然顺序(如果键实现了Comparable接口)或者根据创建TreeMap时提供的Comparator进行排序。
    • 在这个电商项目中,商品价格作为键,要按价格升序存储,商品对象作为值。可以让商品类实现Comparable接口,重写compareTo方法,以价格为比较依据;或者创建TreeMap时传入一个自定义的Comparator,在其compare方法中按价格比较。这样插入到TreeMap中的商品就会按价格升序排列,方便后续查找价格区间内的商品。
  2. 关键Java代码片段
    • 方式一:商品类实现Comparable接口
class Product implements Comparable<Product> {
    private double price;
    // 其他商品属性和构造方法省略

    public double getPrice() {
        return price;
    }

    @Override
    public int compareTo(Product other) {
        return Double.compare(this.price, other.price);
    }
}

TreeMap<Product, String> productTreeMap = new TreeMap<>();
// 插入商品
Product product1 = new Product(10.0);
Product product2 = new Product(20.0);
productTreeMap.put(product1, "Product 1 description");
productTreeMap.put(product2, "Product 2 description");
  • 方式二:使用自定义Comparator
class Product {
    private double price;
    // 其他商品属性和构造方法省略

    public double getPrice() {
        return price;
    }
}

Comparator<Product> priceComparator = (p1, p2) -> Double.compare(p1.getPrice(), p2.getPrice());
TreeMap<Product, String> productTreeMap = new TreeMap<>(priceComparator);
// 插入商品
Product product1 = new Product(10.0);
Product product2 = new Product(20.0);
productTreeMap.put(product1, "Product 1 description");
productTreeMap.put(product2, "Product 2 description");