我有一组包含两个属性的元素,名称(字符串,不唯一)和 id (整数,唯一)。所有具有相同名称的元素都会根据某些条件存储在一起,排序。
插入仅执行一次,因为事先已知所有元素,因此可以轻松完成。删除是根据顺序(第一个)或最终的id完成的。读取值将是最常见(和相关)的操作。
性能是数据结构的首要要求。我认为一个多键,链接数据结构或混合hashmap /堆栈是理想的,但我知道非。我考虑的一些选择是: - 番石榴桌(多个键),但他们没有推/弹行为。 - LinkedHashMaps,但他们只有一把钥匙。
当然我可以使用LinkedHasMaps并迭代删除那些我必须根据id删除元素的情况。我只想知道是否有一些已经实现了高性能的东西。
有什么建议吗?
感谢所有人
答案 0 :(得分:1)
使用Map<String, TreeSet<Integer>>
。这将允许您在同一个键下存储多个项目,并保持整数值的排序。
这个想法是你有一个可以容纳多个值的数据结构的单一键映射。要插入name, value
对,您可以执行以下操作:
private Map<String, TreeSet<Integer>> map = new HashMap<>();
public void insert(String name, int value)
{
if (! map.containsKey(name))
{
map.put(name, new TreeSet<Integer>());
}
map.get(name).add(value);
}
LinkedHashMap
只是跟踪密钥的插入顺序,并按此顺序迭代 - 与使用HashMap
相比,它不会提高性能。