获取有序的值对

时间:2012-04-05 22:46:01

标签: java collections

我希望实现一个可以添加/呈现有序值对的数据结构。例如。

orderedPair.add(value1, text1)  
orderedPair.add(value1, text2)  
orderedPair.add(value2, text3, data1)  
orderedPair.add(value2, data2)  
orderedPair.add(value1, text5)  

当我得到时,我希望它以迭代方式返回

value1, text1  
value1, text2  
value2, text3, data1 and so on.  

LinkedHashMaps或HashMaps的任何变体都不起作用,因为它们只返回基于键的值,而我想要获得的是值,值对。请注意,值/文本或数据都不是唯一的,我可能无法根据任何键获取它。另外,我不想要排序列表,我只需要一个ORDERED列表。

问题是:Java中是否有可用于实现此目的的数据结构?

我没有遇到任何有此目的的人。在这种情况下,我正在考虑编写一个可以实现此目的的自定义集合。欢迎任何建议/帮助。

2 个答案:

答案 0 :(得分:2)

将评论中的讨论包含在答案中,因为它似乎对OP有用:

创建一个class Tuple,这将是你的对/三元组。
请注意,此类可以使用固定数量的参数实现,也可以作为包含对象列表的容器实现。

将这些Tuple个对象保存在List<Tuple>中,您就完成了。

您还可以实施hashCode()equals()并对此类实施Comparable - 您将能够将其与其他集合(例如TreeSetHashSet

答案 1 :(得分:0)

只需使用列表地图,例如Treemap

Map<Integer, List<Integer>> content = new Treemap<Integer, List<Integer>>();

if (not content.containsKey(value1)) {
   content.put(value1, new LinkedList<Integer>());
}
content.get(value1).add(text1)

这将是orderedPair.add函数

然后对于输出,遍历Map并为每个条目写出相应List的每个项目

由于您希望对其进行排序,请将Comparator传递给Treemap构造函数。