我希望找到一种有效的方法来存储数字对,并根据其中一个数字的值进行排序。假设我有一个数字列表:
(1, 2), (3, 5), (4, 3), (7, 8)
这些成对数据需要以某种方式进行存储,然后按第二个数字的降序排序,使得这些成对数据的顺序为
(7, 8), (3, 5), (4, 3), (1, 2)
怎样用Java代码实现这个功能?我知道C++有 std::pair
,但是我想了解Java中的过程。
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);
}
}
Multimap
存储键值对 (1, 2), (3, 5), (4, 3), (7, 8),其中键为 1,值为 2。然后使用 comparator
按照 map 的值对 map 进行排序。你可以使用 TreeMap 并将值以相反的顺序存储。因此,对于每个键值对,第二个值将成为 Map 的键。
Collections.sort()
对自己创建的Tuple
类对象组成的List<>
进行排序,同时使用Comparator<Tuple>
? - Anders R. BystrupMyIntPair
这样拥有自己的类,还是小的2元素数组或列表……?或者所有数字都存储在一个“平坦”的一维数组或列表中? - Marco13