Java 按字典顺序对点数组排序
我试图以字典顺序解一个包含所有整数的NX2数组。我没有办法实现它。而且,这应该在尽可能短的时间内完成。下面是一个例子 输入 输出Java 按字典顺序对点数组排序,java,sorting,Java,Sorting,我试图以字典顺序解一个包含所有整数的NX2数组。我没有办法实现它。而且,这应该在尽可能短的时间内完成。下面是一个例子 输入 输出 1 1 2 1 2 2 4 3 10 1 使用两个整数字段实现您自己的类Point 使其实现(或为此类实现) 填充这些点的数组或,并分别使用相关的sort:或对其进行排序 迭代生成的数组/列表并提取回您的点 使用两个整数字段实现您自己的类Point 使其实现(或为此类实现) 填充这些点的数组或,并分别使用相关的sort:或对其进行排序 迭代生成的数组/列表并提取回您
1 1
2 1
2 2
4 3
10 1
Point
Point
@埃米特解释了该怎么做。我只是想补充一点,您不想按字典顺序对数字数据进行排序。如果你这样做,你会得到
1 1
10 1
2 1
etc.
因为从词典学上讲,10正好在1之后,2之前。
您希望执行常规数字排序。有时它被称为“自然”排序 @amit解释了该怎么做。我只是想补充一点,您不想按字典顺序对数字数据进行排序。如果你这样做,你会得到
1 1
10 1
2 1
etc.
因为从词典学上讲,10正好在1之后,2之前。
您希望执行常规数字排序。有时它被称为“自然”排序 这与对一组整数进行排序基本相同,只是需要对一组对象(在本例中是元组,或者在代码中是两项int数组)进行排序,而不是对整数进行排序 与Python不同,Java不会自动推断int[]之类的字典顺序,因此您可以将其传递到排序函数中,并期望它能够正常工作。幸运的是,java允许您定义排序应该是什么,然后使用内置的排序方法对其进行排序。这是通过实现一个
比较器
,然后定义告诉它如何比较两个对象的比较
方法来实现的
下面给出了一个(非常简化的)示例
import java.util.*;
class Main{
public static void main(String args[]){
int[][] array={{2,2},{1,1},{4,3},{2,1},{10,1}};
Arrays.sort(array, new Comparator<int[]>(){
public int compare(int[] a, int[] b){
//assumes array length is 2
int x,y;
if (a[0]!=b[0]) {
x=a[0];y=b[0];
}
else{
x=a[1];y=b[1];
}
if (x<y) return -1;
else if (x==y) return 0;
else return +1;
}
});
for(int[] term: array){
System.out.println(Arrays.toString(term));
}
}
}
import java.util.*;
班长{
公共静态void main(字符串参数[]){
int[][]数组={{2,2},{1,1},{4,3},{2,1},{10,1};
sort(数组,新的比较器(){
公共整数比较(整数[]a,整数[]b){
//假设数组长度为2
int x,y;
如果(a[0]!=b[0]){
x=a[0];y=b[0];
}
否则{
x=a[1];y=b[1];
}
if(x这与对一组整数进行排序基本相同,只是需要对一组对象(在本例中是元组,或者在代码中是两项int数组)进行排序,而不是整数
与Python不同,Java不会自动推断int[]等事物的字典顺序,因此您可以将其传递到一个排序函数中并期望它工作。幸运的是,java允许您定义排序应该是什么,然后使用内置的排序方法对其进行排序。这是通过实现一个比较器
,然后定义它的比较
方法来完成的,该方法告诉您如何比较两个对象
下面给出了一个(非常简化的)示例
import java.util.*;
class Main{
public static void main(String args[]){
int[][] array={{2,2},{1,1},{4,3},{2,1},{10,1}};
Arrays.sort(array, new Comparator<int[]>(){
public int compare(int[] a, int[] b){
//assumes array length is 2
int x,y;
if (a[0]!=b[0]) {
x=a[0];y=b[0];
}
else{
x=a[1];y=b[1];
}
if (x<y) return -1;
else if (x==y) return 0;
else return +1;
}
});
for(int[] term: array){
System.out.println(Arrays.toString(term));
}
}
}
import java.util.*;
班长{
公共静态void main(字符串参数[]){
int[][]数组={{2,2},{1,1},{4,3},{2,1},{10,1};
sort(数组,新的比较器(){
公共整数比较(整数[]a,整数[]b){
//假设数组长度为2
int x,y;
如果(a[0]!=b[0]){
x=a[0];y=b[0];
}
否则{
x=a[1];y=b[1];
}
如果(x此处,请尝试将此点类与比较器一起使用:
class MyPoint implements Comparable <MyPoint> {
int x, y;
public MyPoint(int x, int y) {
this.x = x;
this.y = y;
}
public int compareTo(MyPoint pt) {
int cmp = Integer.compare(x, pt.x);
if (cmp == 0) {
return Integer.compare(y, pt.y);
} else {
return cmp;
}
}
}
这里尝试将此Point类与comparator一起使用:
class MyPoint implements Comparable <MyPoint> {
int x, y;
public MyPoint(int x, int y) {
this.x = x;
this.y = y;
}
public int compareTo(MyPoint pt) {
int cmp = Integer.compare(x, pt.x);
if (cmp == 0) {
return Integer.compare(y, pt.y);
} else {
return cmp;
}
}
}
现在我正在使用这个方法:现在我的问题是我需要声明特定大小的数组(这意味着所有元素都初始化为0)。我需要向数组中添加一行,对整个矩阵进行排序并执行一些操作,然后添加另一行,对整个矩阵进行排序,然后执行一些操作,直到指定的大小。因为所有元素最初都是0,所以当添加新行并对其进行排序时,它会进入矩阵的底部。有其他方法吗?我不想实现它现在我使用这个方法:现在我的问题是我需要声明特定大小的数组(这意味着所有元素都初始化为0)。我需要向数组中添加一行,对整个矩阵进行排序并执行一些操作,然后添加另一行,对整个矩阵进行排序,然后执行一些操作,直到指定的大小。因为所有元素最初都是0,所以当添加新行并对其进行排序时,它会进入矩阵的底部。有其他方法吗?我不想实现它他的使用要点。看看。看看。