面试题答案
一键面试1. 按场景分析适合的Map
- 快速查找商品场景:
- 适合的Map:HashMap更适合。
- 原因:HashMap基于哈希表实现,通过计算键的哈希值来确定存储位置,在理想情况下,其查找操作的时间复杂度为O(1),能快速定位到目标商品,非常适合快速查找的场景。
- 按商品价格排序展示商品场景:
- 适合的Map:TreeMap更适合。
- 原因:TreeMap基于红黑树实现,它会对存储的键进行排序(默认自然排序或者根据传入的比较器排序)。当以商品价格作为键时,TreeMap会自动按价格对商品进行排序,使得按价格排序展示商品变得很容易,其查找、插入和删除操作的时间复杂度为O(log n) 。
2. 选择和使用方法
- 选择依据:
- 如果业务需求主要是快速查找商品,那么优先选择HashMap。例如,在用户搜索商品时,希望能迅速定位到对应的商品信息,HashMap能满足这种高效查找的需求。
- 若业务需求侧重于按商品价格排序展示商品,如在商品列表页按照价格从低到高或从高到低排序,TreeMap是更好的选择。
- 使用方法:
- HashMap:
import java.util.HashMap;
import java.util.Map;
// 假设商品类为Product,以商品ID作为键
class Product {
private int id;
private String name;
private double price;
// 构造函数、getter和setter方法省略
}
public class Main {
public static void main(String[] args) {
Map<Integer, Product> productMap = new HashMap<>();
Product product1 = new Product(1, "商品1", 100.0);
Product product2 = new Product(2, "商品2", 200.0);
productMap.put(product1.getId(), product1);
productMap.put(product2.getId(), product2);
Product searchedProduct = productMap.get(1);
if (searchedProduct != null) {
System.out.println("找到商品: " + searchedProduct.getName());
}
}
}
- TreeMap:
import java.util.Map;
import java.util.TreeMap;
// 假设商品类为Product,以商品价格作为键
class Product {
private int id;
private String name;
private double price;
// 构造函数、getter和setter方法省略
}
public class Main {
public static void main(String[] args) {
Map<Double, Product> productMap = new TreeMap<>();
Product product1 = new Product(1, "商品1", 100.0);
Product product2 = new Product(2, "商品2", 200.0);
productMap.put(product1.getPrice(), product1);
productMap.put(product2.getPrice(), product2);
for (Map.Entry<Double, Product> entry : productMap.entrySet()) {
System.out.println("价格: " + entry.getKey() + ", 商品: " + entry.getValue().getName());
}
}
}
在使用TreeMap时,如果商品类本身没有实现Comparable接口(自然排序),也可以通过传入一个Comparator(比较器)来定义排序规则,以满足更复杂的排序需求。