如何创建整数和字符串对的排序列表?

如何创建整数和字符串对的列表(或其他类型的容器),允许两个对中的重复项并且可以按整数值排序?

我需要使用名称(字符串)和评分(整数)对填充容器,容器必须允许名称和评分中的重复值,并且我需要按评分值对此列表进行排序。

我尝试使用SortedMap但不允许重复值:

SortedMap sm=new TreeMap(); sm.put(23, "Peter"); sm.put(11, "Tony"); sm.put(110, "Claire"); sm.put(13, "ferca"); sm.put(55, "Julian"); sm.put(13, "Pedro"); 

在这个例子中,ferca和Pedro具有相同的得分值,这是我需要允许的,但是SortedMap用“Pedro”覆盖“ferca”。

这样做的最佳容器类型是什么?

由于您希望订购您的collections,我建议您使用ListCollections.sort 。 如果您决定采用这种方法,您仍有两种选择:

  • 创建一个自定义Comparator ,可以作为参数传递给sort ,或
  • 让辅助Score类实现Comparable

以下是后一种方法的示例和ideone演示 :

 import java.util.*; class Score implements Comparable { int score; String name; public Score(int score, String name) { this.score = score; this.name = name; } @Override public int compareTo(Score o) { return score < o.score ? -1 : score > o.score ? 1 : 0; } } public class Test { public static void main(String[] args){ List scores = new ArrayList(); scores.add(new Score(23, "Peter")); scores.add(new Score(11, "Tony")); scores.add(new Score(110, "Claire")); scores.add(new Score(13, "ferca")); scores.add(new Score(55, "Julian")); scores.add(new Score(13, "Pedro")); Collections.sort(scores); } } 
  1. 创建一个包含这两个字段的类
  2. 创建一个自定义Comparator ,根据int值比较两个对象。
  3. 创建该对象的list
  4. Collection.sort(); 在这里传递comparator obj

     class MyEntity{ int val; String name; } List list = new ArrayList(); list.add(new MyEntity(1,"a")); list.add(new MyEntity(4,"z")); list.add(new MyEntity(2,"x")); Collections.sort(list,new MyComparator()); class MyComparator implements Comparator{ public int compare(MyEntity ob1, MyEntity ob2){ return ob1.getVal() - ob2.getVal() ; } } 

注意:这只是展示基本概念的模型

  • 这是工作ideone演示

听起来像是Guava的 Multimap类型的工作,特别是TreeMultimap 。

如果你想要一个清单,请使用清单……

最好的选择可能是创建自己的类型来封装字符串和整数,添加自己的比较,并将它们放在ArrayList

需要时使用Collections.sort对其进行排序。

如果您不需要允许具有相同名称分数的重复项,则可以使用SortedSet ,只要您的比较顺序对分数名称进行排序即可。

创建保留类型后,替代结构是PriorityQueue来保存项目。 这与Collections.sort()不同,因为项目按顺序插入,高值或低值上升到顶部。

你唯一要做的就是编写一个比较器,以便在instanciation上传递给PriorityQueue,因此它知道根据整数值对项进行排序。

这个方法和Collections.sort()以不同的方式提供相同的结果。 它们也在O(N log N)时间内运行。