根据一个值对数字对进行排序 - Java

4

我希望找到一种有效的方法来存储数字对,并根据其中一个数字的值进行排序。假设我有一个数字列表:

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

这些成对数据需要以某种方式进行存储,然后按第二个数字的降序排序,使得这些成对数据的顺序为

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

怎样用Java代码实现这个功能?我知道C++有 std::pair,但是我想了解Java中的过程。


基于值的排序:https://dev59.com/qXVD5IYBdhLWcg3wDG_m https://dev59.com/dGgu5IYBdhLWcg3wAigi - Bharath Mg
8
如何使用 Collections.sort() 对自己创建的 Tuple 类对象组成的 List<> 进行排序,同时使用 Comparator<Tuple> - Anders R. Bystrup
@Anders R. Bystrup,您能否编写一个样例Java代码来实现这个功能?谢谢。 - user506901
1
@user506901 是的,我可以这样做,但那样你就学不到任何东西了,对吧? - Anders R. Bystrup
@Anders R.Bystrup,您能否考虑一下我的更新?我试图实现一个降序。谢谢。 - user506901
你的“元组”是如何表示的?是像MyIntPair这样拥有自己的类,还是小的2元素数组或列表……?或者所有数字都存储在一个“平坦”的一维数组或列表中? - Marco13
3个回答

1
创建一个实现了可比较接口的类对,并使用arraylist和collections.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,抱歉没看到你的评论。 - Vikram Bhat

1
您可以使用 Multimap 存储键值对 (1, 2), (3, 5), (4, 3), (7, 8),其中键为 1,值为 2。然后使用 comparator 按照 map 的值对 map 进行排序。

当您添加一个 (1,42) 元组时,接下来会发生什么? - Anders R. Bystrup
更新@AndersR.Bystrup,我猜现在不会有任何问题了。 - Kick

1

你可以使用 TreeMap 并将值以相反的顺序存储。因此,对于每个键值对,第二个值将成为 Map 的键。


2
如果成对的第二个值不再唯一,这将变得复杂。那么你需要将列表作为键的值进行存储。 - MrSmith42

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