Java int[]比较器
正在尝试为int[]编写自定义比较器,如下所示:Java int[]比较器,java,Java,正在尝试为int[]编写自定义比较器,如下所示: public class arrayComparator implements Comparator<int[]>{ @Override public int compare(int[] a, int[] b){ return a[1] - b[1]; } } 公共类arrayComparator实现Comparator{ @凌驾 公共整数比较(整数[]a,整数[]b){ 返回a[1]-b[1
public class arrayComparator implements Comparator<int[]>{
@Override
public int compare(int[] a, int[] b){
return a[1] - b[1];
}
}
公共类arrayComparator实现Comparator{
@凌驾
公共整数比较(整数[]a,整数[]b){
返回a[1]-b[1];
}
}
但这对于
a=[-2147483646,-2147483645],[21474836462147483647]
,b=[-2147483646,-2147483645],[21474836462147483647]
的情况是不正确的。我应该如何修改代码?既然您已经了解了这一点,这里有几种方法
public arrayComparator implements Comparator<int[]>{
@Override
public int compare(int[] a, int[] b){
return a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0;
}
}
publicArrayComparator实现比较器{
@凌驾
公共整数比较(整数[]a,整数[]b){
返回a[1]>b[1]?1:a[1]
或
publicArrayComparator实现比较器{
@凌驾
公共整数比较(整数[]a,整数[]b){
如果(a[1]>b[1]){
返回1;
}
if(a[1]
或
publicArrayComparator实现比较器{
@凌驾
公共整数比较(整数[]a,整数[]b){
返回整数。比较(a[1],b[1]);
}
}
既然您已经了解了这一点,下面是几种方法
public arrayComparator implements Comparator<int[]>{
@Override
public int compare(int[] a, int[] b){
return a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0;
}
}
publicArrayComparator实现比较器{
@凌驾
公共整数比较(整数[]a,整数[]b){
返回a[1]>b[1]?1:a[1]
或
publicArrayComparator实现比较器{
@凌驾
公共整数比较(整数[]a,整数[]b){
如果(a[1]>b[1]){
返回1;
}
if(a[1]
或
publicArrayComparator实现比较器{
@凌驾
公共整数比较(整数[]a,整数[]b){
返回整数。比较(a[1],b[1]);
}
}
准确地说,为了避免此类问题,要将int
值与自然顺序进行比较,我们应该始终使用内置的
所以改变
return a[1] - b[1];
进入
顺便说一句,由于比较器是功能接口,我们可以通过lambdas和/或方法参考提供其实现:
Comparator<int[]> arrayComparator1 = (a, b) -> Integer.compare(a[1], b[1]);
Comparator<int[]> arrayComparator2 = Comparator.comparingInt(arr -> arr[1]);
comparatorarraycomparator1=(a,b)->Integer.compare(a[1],b[1]);
比较器arrayComparator2=比较器.comparingInt(arr->arr[1]);
除了主要问题之外,Java普遍接受的编码风格是非原语类型的名称应该以大写字母开头,比如
String
ArrayList
。因此,将arrayComparator
更改为arrayComparator
以避免此类问题,要将int
值与自然顺序进行比较,我们应该始终使用内置的
所以改变
return a[1] - b[1];
进入
顺便说一句,由于比较器是功能接口,我们可以通过lambdas和/或方法参考提供其实现:
Comparator<int[]> arrayComparator1 = (a, b) -> Integer.compare(a[1], b[1]);
Comparator<int[]> arrayComparator2 = Comparator.comparingInt(arr -> arr[1]);
comparatorarraycomparator1=(a,b)->Integer.compare(a[1],b[1]);
比较器arrayComparator2=比较器.comparingInt(arr->arr[1]);
除了主要问题之外,Java普遍接受的编码风格是非原语类型的名称应该以大写字母开头,比如
String
ArrayList
。因此,将arrayComparator
更改为arrayComparator
更简单:
Comparator<int[]> intArrayComparator = (a, b) -> Integer.compare(a[1], b[1]);
无需为此创建显式命名的自定义类。更简单:
Comparator<int[]> intArrayComparator = (a, b) -> Integer.compare(a[1], b[1]);
无需为此创建显式命名的自定义类。是否要比较[]和[]或[]和[]之间的差异?数组大于或小于另一个数组意味着什么?如果大小不同怎么办?计算差异时会出现整数溢出。是否要比较[]和[]或[]和[]之间的差异?数组大于或小于另一个数组意味着什么?如果它们的大小不同呢?计算差异时会出现整数溢出。这是基于:
公共静态int比较(int x,int y){return(x
这是基于:公共静态int比较(int x,int y){return return(x