获取有序值对

3

我希望实现一种数据结构,可以添加/呈现排序后的值对。例如:

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或任何HashMap的变体都不能满足需求,因为它们仅返回基于键的值,而我需要的是值/值对。请注意,值/文本或数据都不唯一,可能无法根据任何键获取它们。此外,我不需要排序列表,只需要有序列表。
问题是:Java中是否有任何数据结构可用于实现此目的?
我没有找到适合此目的的数据结构。在这种情况下,我正在考虑编写一个自定义集合来实现此目的。欢迎任何建议/帮助。

此外,我正在尝试避免使用二维数组。 - conphident4
我可能误解了问题:为什么不只使用List<Tuple>呢?其中Tuple是您定义的一个包含相关元素类型的类? - amit
这是你将要创建的东西 - 如果你需要2-3个值:那就去做吧,它也可以作为另一个列表的容器实现。 - amit
好的,谢谢。让我试一试。 - conphident4
text5在输出中去哪了? - j13r
显示剩余2条评论
2个回答

2
将评论中的讨论整理成一个答案,因为它对OP有用:
创建一个类Tuple,它将是你的一对/三元组。 注意,这个类可以用固定数量的参数实现,也可以作为容器来保存对象列表。
在List中保存这些Tuple对象,你就完成了。
你还可以实现hashCode(),equals()并使其实现Comparable到这个类-然后你将能够使用它与其他集合如TreeSet和HashSet。

顺便说一下,这是我最喜欢的Tuple实现......带有测试 - Petr Janeček

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 构造函数。


请注意这里是 Map<T,V> 而不是 Map<T> [同样适用于 TreeMap]。你是在寻找一个 Set<T> 吗? - amit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接