“键值”对集合维护顺序和按键和对索引检索?

时间:2014-09-08 07:54:11

标签: java collections tablemodel abstracttablemodel

我想使用一组“键 - 值”对:

  • 哪个是JTable数据模型(TableModel实现)的基础,因此我需要按索引/位置访问元素(例如,实现Object getValueAt(int rowIndex, int columnIndex))。集合必须保留元素的顺序。 ArrayList会对此有所帮助。
  • 允许通过键的值检索元素。 HashMap对此有好处。

我找到的最接近的可用收藏品是LinkedHashMap。它保留了订单并允许按键检索。但是,索引/位置无法访问项目,我必须遍历项目,直到找到好项目。这不是时间有效的。

有没有比this one更好的? 感谢。


(问题类似于this one,但所提供的解决方案使用转换toArray(),这不是时间效果。如果对的集合发生变化,则需要再次进行转换。)< / p>

3 个答案:

答案 0 :(得分:1)

JRE中没有这样的集合实现。

但是,您可以通过使用Map<K,V>存储键值对以及按顺序存储键的附加List<K>来轻松解决此问题。然后,您可以使用密钥或索引访问值:keyValueMap.get(keys.get(index))

您必须确保始终在两个集合上同步修改:

  • 添加/更改条目:if (keyValueMap.put(key, value) == null) keys.add(key)
  • 删除条目:if (keyValueMap.remove(key) != null) keys.remove(key)

请注意,此实现假定值永远不会null。如果还需要null值,则代码会稍微复杂一些,因为我们必须使用keyValueMap.contains(key)检查是否存在条目。

答案 1 :(得分:0)

如果没有实现自己的集合,最简单的方法就是拥有两个集合,其中键值在第二个集合中相反,但在其他方面的顺序相同。

(希望这是一个评论,但尚未足够的代表)

答案 2 :(得分:0)

Apache Commons Collection有一个ListOrderedMap类,可以满足您的需求。