0

我在 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. 如果每个对象分配的某个属性具有布尔值,例如“true”,则打印集合中的所有元素(不同类型的);

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

4

2 回答 2

2

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

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

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

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

Map<String, Object> idCache = new HashMap<String, Object>();
于 2012-09-02T20:44:04.467 回答
0

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

于 2012-09-02T20:43:46.910 回答