Arrays
java.lang.Object
java.util.Arrays
此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。
除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullPointerException。
通过以下代码讲解Arrays工具类中的各种方法的作用
sort:
对指定类型数组的指定范围按数字升序进行排序。排序的范围从索引 fromIndex(包括)一直到索引 toIndex(不包括)。(如果 fromIndex==toIndex,则排序范围为空。)
该排序算法是一个经过调优的快速排序法,改编自 Jon L. Bentley 和 M. Douglas McIlroy 合著的 Engineering a Sort Function", Software-Practice and Experience Vol. 23(11) P. 1249-1265 (November 1993)。此算法在许多数据集上提供 n*log(n) 性能,这导致其他快速排序会降低二次型性能。
import java.util.Arrays; public class ArrayTools { public static void main(String[] args) { int a[]=new int[]{1,3,2,4,6,5}; //排序 Arrays.sort(a); for(int i=0;i<a.length;i++) { System.out.print(a[i]+" "); } } }
binarySearch:
public static int binarySearch(object []a,object key)
使用二分搜索法来搜索指定类型数组的范围,以获得指定的值。必须在进行此调用之前对范围进行排序(通过 sort(byte[], int, int)
方法)。如果没有对范围进行排序,则结果是不确定的。如果范围包含多个带有指定值的元素,则无法保证找到的是哪一个。
参数:
a
- 要搜索的数组
key
- 要搜索的值
返回:
如果它包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入数组的那一点:即第一个大于此键的元素索引,如果数组中的所有元素都小于指定的键,则为 a.length。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
//二分搜索 int key=Arrays.binarySearch(a,3); System.out.print("key:\n"+key);
//不在数组内
int key2=Arrays.binarySearch(a,7);
System.out.print("key:\n"+key2+"\n");//-7,实际上并没有插入数组,只是返回插入点
binarySearch(object[ ], int fromIndex, int endIndex, object key):
a
- 要搜索的数组
fromIndex
- 要搜索的第一个元素的索引(包括)
toIndex
- 要搜索的最后一个元素的索引(不包括)
key
- 要搜索的值
equals
public static boolean equals(object[] a,object[] a2)
参数:
a
- 将测试其相等性的一个数组a2
- 将测试其相等性的另一个数组
返回:
如果两个数组相等,则返回 true,反之返回false
//equals int c[]=new int[]{1,2,3,7,8,9}; int b[]=new int[]{1,2,3,4,5,6}; System.out.print(Arrays.equals(b,c));
hashCode:
public static int hashCode(object[] a)
参数:
a
- 要计算其哈希值的数组
返回:
a 数组基于内容的哈希码
hashCode不但能计算数组的哈希值,也能够计算string类的哈希值,每个对象都有对应的hashcode,hashcode也就是在哈希表中的位置 ,这里要注意,物理地址的概念和哈希值没有半毛钱关系,物理地址是对象在内存中的地址。hashcode通过hash函数得到。
常见的hash函数:
-直接取余法:f(x)=x mod maxM(maxM一般是不太接近2^t的一个质数)
-乘法取整法
-平方取中法:平方后取中
Java中的hashCode方法:
//数组hash值 int b[]=new int[]{1,2,3,4,5,6}; System.out.print("\n"+Arrays.hashCode(b)); //字符串hash值 String str=new String("www"); System.out.print("\n"+str.hashCode());
toString:
返回指定数组内容的字符串表示形式。如果数组包含作为元素的其他数组,则通过从 Object 中继承的 Object.toString()
方法将它们转换为字符串,这描述了它们的标识,而不是它们的内容。
此方法返回的值等于 Arrays.asList(a).toString() 返回的值,除非 a 为 null,在这种情况下返回 "null"。
//toString((带逗号分隔) int c[]=new int[]{1,2,3,7,8,9}; System.out.print("\n"+Arrays.toString(c));
deepToString:
返回指定数组“深层内容”的字符串表示形式。如果数组包含作为元素的其他数组,则字符串表示形式包含其内容等。此方法是为了将多维数组转换为字符串而设计的。
//deepToString
int k[][]=new int[][]{{1,2,3},{1,2,3}};
System.out.print(Arrays.deepToString(k));