【问题标题】:Is a HashMap a proper data structureHashMap 是一个合适的数据结构吗
【发布时间】:2012-09-02 20:25:35
【问题描述】:

我在一个 HashMap 中存储了 3 种类型的对象。

HashMap<String, ArrayList<Car>>

['Lorry', [list of lorries]]
['Sport', [list of sport's cars]]

HashMap 字符串键保存对象的类型(Car 的子类),第二个元素将具有例如的对象存储在数组中。属性,例如:ID、日期等。

我必须做的四件事主要是:

  1. 当没有提供关于其类型的信息时,检查某个 ID 是否存在于 HashMap 中
  2. 在给定类型的情况下打印特定 ID 的元素。
  3. 打印特定类型的所有元素
  4. 如果每个对象分配的某些属性具有布尔值,例如,则打印集合中的所有元素(不同类型的) “真”;

HashMap 是正确的结构吗?如果涉及到第一点,我觉得有问题。看来我必须遍历整个集合,如果是这样,还有什么其他集合更适合这种要求?

【问题讨论】:

  • ID和类型有什么区别? ID只是一个唯一标识符吗?钥匙起什么作用?分享一个将数据放入此 HashMap 的示例。
  • ID 是整个集合中的唯一标识符,并“附加”到具体对象。类型只是 Car 的类型,例如运动、货车等
  • 所以可以安全地假设 ID 键,对吧?还是键入 键?澄清这部分,我们将能够确定地图是否适合这项任务。

标签: java data-structures hashmap


【解决方案1】:

基本方法是合理的,但是由于您只想存储每个实例一次,因此对于映射条目值,SetList 更好:

Map<String, Set<Car>> typeCache = new HashMap<String, HashSet<Car>>();

HashSetcontains() 方法确实非常快,因此查找地图中是否包含特定实例的值不会花费太多。

使用 两个 映射可能会更好 - 每种类型的查找一次,所以也使用:

Map<String, Object> idCache = new HashMap<String, Object>();

【讨论】:

    【解决方案2】:

    HashMap 是适合该工作的数据结构,但在您的情况下,您可能会考虑使用两个 HashMap:一个包含关系“汽车类型”->“该类型的汽车”,第二个用于关系“ID”->“具有该 ID 的汽车”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      相关资源
      最近更新 更多