【问题标题】:Quickest way to lookup a object查找对象的最快方法
【发布时间】:2012-06-03 00:12:08
【问题描述】:

假设您有一个 Sunglasses 对象列表,其中有 ...

  1. 4 个属性,颜色、形状、风格和品牌。
  2. 没有相同的; 4个属性的组合总是不同的

检索它们的最快方法是什么?

我认为:

  1. 覆盖 Sunglasses 类中的 hashcode() 方法(应该是唯一的,因为它们都不相同)。
  2. 然后将每个对象的hashcode作为key,将对象本身作为value,放入Hashmap中

假设我确切地记得我想要的玻璃杯的颜色形状、风格和品牌 得到,

  1. 我使用已实现的哈希码方法应用它们。
  2. 然后从 hashmap 中获取它,这应该给我时间 O(1) 检索。

问题是如果我只知道颜色。如何获得所有具有相同颜色的眼镜的列表?

【问题讨论】:

  • 是的,基本上我在徘徊DBMS的选择是如何实现的
  • 添加颜色索引。 (这就是 DBMS 所做的)

标签: java algorithm software-design object-oriented-analysis object-oriented-database


【解决方案1】:

除了您的其他数据结构之外,还构建一个HashMap<Color,Collection<Glasses>>

此地图本质上作为Color 属性上的索引服务。

每当您在其他数据结构中添加或移除眼镜时,请务必同时更新此颜色索引。

【讨论】:

  • 数据库是这样的吗?
  • 一点改进,假设我有>而不是HashMap>,可以是HashMap
【解决方案2】:
  1. 创建一个值类来保存 4 个属性,并创建使用所有字段的 hashcode 和 equals 方法。
  2. 将该类用作太阳镜的一个字段,而不是使用单独的字段(这样,如果您更改它以添加另一个字段,它会随处更改)
  3. 使用值类的哈希映射 --> 太阳镜,查询时,在使用 map.get(value) 处构建一个值对象

【讨论】:

  • 谢谢,但是你的 map.get 版本只返回一个对象,我期待多个返回。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 2020-07-01
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
相关资源
最近更新 更多