Java Arrays.compare()
方法
原文:https://www.studytonight.com/java-util/java-arrays-compare-method
在本教程中,我们将通过一些优秀的例子从Arrays
课上学习compare()
方法。在此之前,让我们想一想为什么我们不能直接将数组与==
运算符进行比较?因为数组名在引用上有差异,所以这种比较总是会返回一个错误的值。为了克服这个问题,Java Arrays 类有 compare()
方法,可以检查哪个数组在字典上更小或更大。
句法
下面给出了函数的语法,它以两个数组作为参数,并根据数组中每个元素的比较结果返回一个整数值。
public static int compare(datatype[] array1,datatype[] array2)
这个方法的源代码:这个方法的内部工作方式类似于下面给出的代码。
int i = Arrays.mismatch(array1, array2);
if (i >= 0 && i < Math.min(array1.length, array2.length))
return Boolean.compare(array1[i], array2[i]);
return array1.length - array2.length;
compare()
方法重载方法列表
此表包含compare()
方法的所有重载变体。
方法 | 描述 |
---|---|
静态 int 比较(布尔[] a,布尔[] b) | 此方法按字典顺序比较两个布尔数组。 |
静态 int compare(布尔[] a,int aFromIndex,int aToIndex、boolean[] b、int bfromindex、int btoindex) | 此方法在指定范围内按字典顺序比较两个布尔数组。 |
静态 int 比较(字节[] a,字节[] b) | 此方法按字典顺序比较两个字节数组。 |
静态 int compare(字节[] a,int aFromIndex,int aToIndex,字节[] b,int bfromindex,int btoindex) | 此方法在指定范围内按字典顺序比较两个字节数组。 |
静态 int 比较(char[] a,char[] b) | 此方法按字典顺序比较两个字符数组。 |
静态 int compare(char[] a,int aFromIndex,int aToIndex、char[] b、int bfromindex、int btoindex) | 此方法在指定范围内按字典顺序比较两个字符数组。 |
静态 int 比较(double[] a,double[] b) | 此方法按字典顺序比较两个双数组。 |
静态 int compare(double[] a,int aFromIndex,int aToIndex、double[] b、int bfromindex、int btoindex) | 此方法在指定范围内按字典顺序比较两个双数组。 |
静态 int 比较(浮点[] a,浮点[] b) | 此方法按字典顺序比较两个浮点数组。 |
静态 int compare(float[] a,int aFromIndex,int aToIndex、float[] b、int bfromindex、int btoindex) | 此方法在指定范围内按字典顺序比较两个浮点数组。 |
静态 int 比较(int[] a,int[] b) | 此方法按字典顺序比较两个 int 数组。 |
静态 int compare(int[] a,int aFromIndex,int aToIndex、int[] b、int bfromindex、int btoindex) | 此方法在指定范围内按字典顺序比较两个 int 数组。 |
静态 int compare(long[] a,int aFromIndex,int aToIndex、long[] b、int bfromindex、int btoindex) | 此方法在指定范围内按字典顺序比较两个长数组。 |
静态 int 比较(长[] a,长[] b) | 此方法按字典顺序比较两个长数组。 |
静态 int compare(short[] a,int aFromIndex,int aToIndex、short[] b、int bfromindex、int btoindex) | 此方法在指定范围内按字典顺序比较两个短数组。 |
静态 int 比较(短[] a,短[] b) | 此方法按字典顺序比较两个短数组。 |
静态 |
此方法在指定范围内按字典顺序比较两个对象数组。 |
静态 Comparator super T> cmp) |
此方法在指定范围内按字典顺序比较两个对象数组。 |
静态 |
这个方法比较了两个对象数组,在可比较的元素中,按字典顺序排列。 |
静态 Comparator super T> cmp) |
此方法使用指定的Comparator 按字典顺序比较两个对象数组。 |
现在,让我们讨论一些例子来说明基于数组元素差异的观察。
示例:如果两个数组在字典序上相等
如果数组 1 和数组 2 相等,则compare()
返回零。您可以看到,在给定的情况下,两个数组是相同的,这就是为什么我们得到的输出是零。
import java.util.Arrays;
public class StudyTonight
{
public static void main(String[] args)
{
int array1[]={19,27,55,80};
int array2[]={19,27,55,80};
System.out.println(Arrays.compare(array1,array2));
}
}
0
示例:如果第一个数组在字典序上小于第二个数组
如果数组 1 在字典上小于数组 2,返回负值。在给定的示例中,第一个数组的第一个元素的值小于第二个数组,并且所有其他元素都相同,因此它们在比较中不计数。所以基于比较,我们得到 -1 作为输出。
import java.util.Arrays;
public class StudyTonight
{
public static void main(String[] args)
{
int array1[]={18,5,13,2};
int array2[]={19,5,13,2};
System.out.println(Arrays.compare(array1,array2));
}
}
-1
示例:如果第二个数组在字典序上小于第一个数组
如果数组 1 在字典上大于数组 2 则返回正值。在下面给出的代码中,数组的第一个元素大于第二个数组的元素。所以,我们得到了 1 作为输出。
import java.util.Arrays;
public class StudyTonight
{
public static void main(String[] args)
{
int array1[]={21,15,3,12};
int array2[]={19,15,3,12};
System.out.println(Arrays.compare(array1,array2));
}
}
1
在一种情况下,我们不想比较整个数组,也有另一种方法,即切片数组并将其传递给 compare()函数。其语法如下:
public static int compareUnsigned(short[] a, int aFromIndex, int aToIndex, short[] b, int FromIndex, int bToIndex)
示例:切片的compare()
方法
下面的例子与上面给出的例子相同,但唯一的区别是这里,我们通过为两个数组提供 startIndex 和 endIndex 来限制范围内的比较。它是 compare()方法的重载方法。
import java.util.Arrays;
public class StudyTonight
{
public static void main(String[] args)
{
int array1[]={19,15,3,12,16,48,14,7,88,54};
int array2[]={19,15,3,12,16,48,14,7,88,54};
System.out.println(Arrays.compare(array1,2,5,array2,2,5));
}
}
0
例:compare()
方法,都是重载方法
下面给出的例子说明了compare()
方法的所有重载方法。我们使用不同的数据类型实现了所有的方法,如boolean
、byte
、char
、double
、float
、int
、long
和short
。我们也可以看到如何用相应的不同范围来实现compare()
方法。
import java.util.Arrays;
public class StudyTonight
{
public static void main(String[] args)
{
//Example of static int compare(boolean[] a, boolean[] b)
boolean[] boolArray1={true, false, true, false, true, true};
boolean[] boolArray2={false, true, false, true, false, true};
System.out.println("Arrays.compare(boolArray1, boolArray2): "+Arrays.compare(boolArray1, boolArray2));
//Example static int compare(boolean[] a, int aFromIndex,int aToIndex, boolean[] b, int bFromIndex, int bToIndex)
System.out.println("Arrays.compare(boolArray1, 2 , 4, boolArray2, 3, 5): "+Arrays.compare(boolArray1, 2, 4, boolArray2, 3, 5));
//Example of static int compare(byte[] a, byte[] b)
byte[] byteArray1={4, 1, 8, 2, 2, 3, 16, 4, 4};
byte[] byteArray2={7, 9, 4, 12, 9, 7, 2, 14, 8};
System.out.println("Arrays.compare(byteArray1, byteArray2): "+Arrays.compare(byteArray1, byteArray2));
//Example static int compare(byte[] a, int aFromIndex, int aToIndex, byte[] b, int bFromIndex, int bToIndex)
System.out.println("Arrays.compare(byteArray1, 2, 4, byteArray2, 3, 5): "+Arrays.compare(byteArray1, 2, 4, byteArray2, 3, 5));
//Example of static int compare(char[] a, char[] b)
char[] charAarray1={'a', 'e', 'i', 'o', 'u'};
char[] charAarray2={'a', 'e', 'i', 'o', 'u'};
System.out.println("Arrays.compare(charAarray1, byteArray2): "+Arrays.compare(charAarray1, charAarray2));
//Example static int compare(char[] a, int aFromIndex,int aToIndex, char[] b, int bFromIndex, int bToIndex)
System.out.println("Arrays.compare(charAarray1, 2, 4, charAarray2, 3, 5): "+Arrays.compare(charAarray1, 2, 4, charAarray2, 3, 5));
//Example of static int compare(double[] a, double[] b)
double[] doubleArray1={12, 3, 17, 5, 8, 17, 2, 37};
double[] doubleArray2={4, 7, 2, 5, 8, 12, 2, 50};
System.out.println("Arrays.compare(doubleArray1, doubleArray2): "+Arrays.compare(doubleArray1, doubleArray2));
//Example static int compare(double[] a, int aFromIndex, int aToIndex, double[] b, int bFromIndex, int bToIndex)
System.out.println("Arrays.compare(doubleArray1, 1, 5, doubleArray2, 3, 5): "+Arrays.compare(doubleArray1, 1, 5, doubleArray2, 3, 5));
//Example of static int compare(float[] a, float[] b)
float[] floatArray1={4.12f, 7.3f, 8.17f, 1.5f, 7.8f, 4.17f, 3.2f, 6.37f};
float[] floatArray2={6.12f, 8.3f, 5.17f, 6.5f, 4.8f, 6.17f, 2.2f, 5.37f};
System.out.println("Arrays.compare(floatArray1, floatArray2): "+Arrays.compare(floatArray1, floatArray2));
//Example static int compare(float[] a, int aFromIndex,int aToIndex, float[] b, int bFromIndex, int bToIndex)
System.out.println("Arrays.compare(floatArray1, 2, 6, floatArray2, 3, 5): "+Arrays.compare(floatArray1, 2, 6, floatArray2, 3, 5));
//Example of static int compare(int[] a, int[] b)
int[] intArray1 ={5, 6, 7, 10, 17, 7, 1, 4};
int[] intArray2 ={2, 4, 8, 12, 27, 5, 7, 8};
System.out.println("Arrays.compare(intArray1, intArray2): "+Arrays.compare(intArray1, intArray2));
//Example static int compare(int[] a, int aFromIndex,int aToIndex, int[] b, int bFromIndex, int bToIndex)
System.out.println("Arrays.compare(intArray1, 1, 5, intArray2, 0, 4): "+Arrays.compare(intArray1, 1, 5, intArray2, 0, 4));
//Example of static int compare(long[] a, long[] b)
long[] longArray1={4,54,56,17,51,84,5,28,33,9};
long[] longArray2={3,4,16,4,51,12,5,28,8,19};
System.out.println("Arrays.compare(longArray1, longArray2): "+Arrays.compare(longArray1, longArray2));
//Example static int compare(long[] a, int aFromIndex,int aToIndex, long[] b, int bFromIndex, int bToIndex)
System.out.println("Arrays.compare(longArray1, 0, 4, longArray2, 1, 5): "+Arrays.compare(longArray1, 0, 4, longArray2, 1, 5));
//Example of static int compare(short[] a, short[] b)
short[] shortArray1={5, 8, 6, 4, 2, 0};
short[] shortArray2={1, 2, 3, 4, 5, 6};
System.out.println("Arrays.compare(shortArray1, shortArray2): "+Arrays.compare(shortArray1, shortArray2));
//Example static int compare(short[] a, int aFromIndex,int aToIndex, short[] b, int bFromIndex, int bToIndex)
System.out.println("Arrays.compare(shortArray1, 0, 4, shortArray2, 1, 5): "+Arrays.compare(shortArray1, 0, 4, shortArray2, 1, 5));
}
}
数组.比较(boolArray1,boolArray2): 1 数组.比较(boolArray1,2,4,boolArray2,3,5): 0 数组.比较(byteArray1,byteArray2): -3 数组.比较(byteArray1,2,4,byteArray2,3,5): -4 数组.比较(chararray 1,byteArray2): 0 数组.比较(chararray 1,2,4,charAarray2,2
结论:
在本教程中,我们学习了如何使用compare()
功能。如果数组 1 和数组 2 相等,那么 compare()返回零,如果数组 1 在字典上小于数组 2,则返回负值。如果数组 1 按字典顺序大于数组 2,则返回正值。