【问题标题】:Sorting pairs of numbers according to one value - Java根据一个值对数字对进行排序 - Java
【发布时间】:2014-03-01 19:51:37
【问题描述】:

我对一种存储数字对并根据其中一个数字的值对它们进行排序的有效方法感兴趣。假设我有一个数字列表:

(1, 2), (3, 5), (4, 3), (7, 8)

这些对需要以某种方式存储,然后按照第二个数字的降序排列,这样这些对的顺序就是

(7, 8), (3, 5), (4, 3), (1, 2)

实现此目的的 Java 代码是什么?我知道 C++ 的 std::pair,但我想知道 Java 中的过程。

【问题讨论】:

  • Collections.sort() 使用您自己的 Tuple 类对象的 List<>Comparator<Tuple>?
  • @Anders R. Bystrup 您能否编写一个实现此目的的示例 Java 代码?谢谢
  • @user506901 是的,我可以,但是你不会学到任何东西,对吗?
  • @Anders R.Bystrup 你能考虑我的更新吗?我正在尝试实现降序。谢谢

标签: java algorithm sorting


【解决方案1】:

创建一个class pair which implements comparable interface 并使用arraylistcollections.sort 对其进行排序。

示例:-

public class pair implements Comparable<pair> {

            int a,b;
            @Override
            public int compareTo(pair o) {
                return(o.b-b); 
            }

            public pair(int a,int b) {

               this.a = a ;
               this.b = b;

            }

            public String toString() {
                return "("+a+","+b+")";

            }


            public static void main(String[] args) {

                 ArrayList pairs =  new ArrayList();
                 pairs.add(new pair(4,5));
                 pairs.add(new pair(7,8));
                 pairs.add(new pair(1,3));
                 Collections.sort(pairs);
                 System.out.println("sorted: "+pairs);

            }


        }

【讨论】:

  • @AndersR.Bystrup 没有看到你的评论很抱歉。
【解决方案2】:

您可以使用Multimap 存储对 (1, 2), (3, 5), (4, 3), (7, 8) 作为第一对的键 1 和值 2。然后使用 @987654322 @根据map的值对map进行排序。

【讨论】:

  • 那么当你添加一个 (1,42) 元组时呢?
  • 更新了@AndersR.Bystrup 我想现在它不会产生任何pblm
【解决方案3】:

您可以使用TreeMap 并以相反的顺序存储值。所以 paris 的第二个值将是 Map 的键。

【讨论】:

  • 如果对的第二个值不再唯一,这将变得复杂。比您需要将列表存储为键的值。
猜你喜欢
  • 2015-04-17
  • 2015-08-05
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2021-10-07
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多