You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JAVA中如何通过TreeMap存储的Car对象model属性查询对应key

问题原因

Java 标准库的TreeMap没有内置通过值的成员属性反向查询对应键的方法,你写的list.getKey(model)无法运行:一是TreeMap本身没有getKey这个API,二是你的TreeMap键类型为Integer,和要查询的model字符串类型不匹配,必须自行遍历匹配实现。

前置修正

你定义的Car类写法存在语法错误,且需要补充成员变量的getter方法才能正常访问属性,修正后代码如下:

public class Car {
  String model;
  String brand;
  Integer yearReleased;
  float price;

  // 补充model属性的get方法
  public String getModel() {
    return model;
  }
}

实现方案

1. Java 8+ 流式写法(推荐)

返回第一个匹配的键
import java.util.Optional;
import java.util.TreeMap;

public Optional<Integer> searchModel(TreeMap<Integer, Car> cars, String targetModel) {
  return cars.entrySet().stream()
          .filter(entry -> targetModel.equals(entry.getValue().getModel()))
          .map(entry -> entry.getKey())
          .findFirst();
}

调用时如果找不到匹配会返回空的Optional,可以避免空指针异常。

返回所有匹配的键(兼容多辆同model车辆场景)
import java.util.List;
import java.util.TreeMap;
import java.util.stream.Collectors;

public List<Integer> searchAllModelKeys(TreeMap<Integer, Car> cars, String targetModel) {
  return cars.entrySet().stream()
          .filter(entry -> targetModel.equals(entry.getValue().getModel()))
          .map(entry -> entry.getKey())
          .collect(Collectors.toList());
}

2. 低版本Java 遍历写法

import java.util.TreeMap;
import java.util.Map.Entry;

public Integer searchModel(TreeMap<Integer, Car> cars, String targetModel) {
  for (Entry<Integer, Car> entry : cars.entrySet()) {
    if (targetModel.equals(entry.getValue().getModel())) {
      return entry.getKey();
    }
  }
  // 无匹配返回null
  return null;
}

优化建议

如果需要频繁执行这种反向查询,可以额外维护一个Map<String, List<Integer>> modelToKeys的映射关系,新增/删除Car时同步更新这个映射,查询时可以直接O(1)拿到结果,避免每次遍历全量数据,性能提升明显。

内容的提问来源于stack exchange,提问作者rr11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 00:57:01