【问题标题】:SortedMap with duplicate keys具有重复键的 SortedMap
【发布时间】:2015-07-14 06:57:48
【问题描述】:

我需要根据类的方法返回的浮点数对自定义类(Face)的一些对象进行排序。

我决定使用排序映射,但我意识到 Collection 不会返回重复的键。

这是我的代码:

sorted.clear();
for(Face f : face) {
  sorted.put(f.getFarthestDepth(), f);
}
//Code for printing entries of the sortedTree
for(Map.Entry entry : sorted.entrySet())
  print(entry.getKey() + " ");
println();

在我的渲染方法上我有:

pushMatrix();
translate(center.x, center.y);
for(Map.Entry entry : sorted.entrySet()) {
  Face f = (Face)entry.getValue();
  beginShape();
  fill(255);
  for (Vertex v : f.vertex) {
    vertex(v.x, v.y);
  }
  endShape(CLOSE);
}  
popMatrix();

当我打印树形图的条目时,我只得到 2 个值,我需要得到 6 个具有相同键值的值。

我正在使用Processing,但代码几乎与java相似。

如何获取所有 Face 对象?

【问题讨论】:

  • 一张地图中不能有多个具有相同键值的对象。如果要支持重复元素,请考虑使用列表。
  • 使用地图> 代替地图
  • 您似乎有一组面孔。为什么不根据您的 Face 浮点值实现 Comparator 并调用 Collection#sort
  • @JBNizet 有什么区别?我会得到重复的键值吗?我还应该进行哪些其他更改?
  • 不同之处在于,对于每个浮点数,您可以对具有此浮点值的所有面进行排序,而不仅仅是一个。也就是说,Map 对于能够从键中获取值很有用。但是您的代码从不这样做。你为什么首先使用地图?为什么不只是一个排序列表?

标签: java processing sortedmap


【解决方案1】:

将 Guava 的 TreeMultiMap 与自定义比较器一起使用。它保留重复键的对象列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-16
    • 2012-10-22
    • 2013-12-19
    • 1970-01-01
    • 2022-08-18
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多