JAVA工具类——(Collections类和Arrays类)
Collections类和Arrays类都是JAVA提供的一个集合操作工具类,其包含的方法都是静态方法,为什么是静态的方法,就是可以通过类名直接调用,不需要进行实例化对象,方便引用。
一. Arrays类中的方法,方便对数组进行排序,查找,替换等一系列操作,以下列举了Arrays中比较常用的几种方法:
1:toString(array):转换成字符串;
2:**sort(array)**排序;
3: copyOf(array,Length):复制成一个新的数组;
4:binarySearch(array,value):查询某一个元素的下标;
5:**fill(array,value);**所有的元素都赋值为value;
6: boolean equals(array1,array2);将二个数组进行比较;
7:hashCode(Array),根据指定数组的内容返回哈希码,确定是不是同一个数组;****
1.将数组转换成一个字符串,将字符串输出就是把数组进行输出,可以不用for循环
String toString(array)//将一个数组array转换成一个字符串
int[] a={12,11,16,22,28};
int[] b={12,11,16,22,28};
int[] c={33,12,26,88,66,13};
System.out.println(Arrays.toString(a));先转换成字符串,在进行输出;
[12, 11, 16, 22, 28]
2.将数组进行升序排列:其操作是自然顺序(即按照数字从大到小或者按照字母)排列指定的数组。
sort(array)//对数组array的元素进行升序排列,一种是按照数字来进行排序;一种是按照首字母来进行排序;
Arrays.sort(a);
[11, 12, 16, 22, 28]
//按照字母来进行排序;
String[] m={"a","t","b","c","m"};
Arrays.sort(m);
[a, b, c, m, t]
因为Arrays里面没有反转元素的顺序,要想从小到大;可以利用for循环进行;
for (int i = a.length-1; i >0 ; i--) {
System.out.println(a[i]);
}
28 22 16 12 11
3.将数组array复制成一个长度为length的新数组,其返回类型要与复制额数组一致;如果是int类型的数组,新增加的数组元素填充0;String类型的填充null;
copyOf(array,Length)
int[] a1=Arrays.copyOf(b,8);
[12, 11, 16, 22, 28, 0, 0, 0]
[a, b, c, m, t, null, null, null]
4.查询元素值value在数组array中的:下标(前提是要求元素已经按升序进行排列)
int binarySearch(array,value);//得到的是一个int类型的数;
int index=Arrays.binarySearch(a1,16);
System.out.println(index);
5.把数组array所有的元素都赋值为value;
void fill(array,value);
Arrays.fill(a,88);
System.out.println(Arrays.toString(a));
[88, 88, 88, 88, 88]
6.将二个数组进行比较,如果长度,数值相等则返回true;
boolean equals(array1,array2)
System.out.println(Arrays.equals(a,b));
System.out.println(Arrays.equals(a,c));
true
false
7.Arrays里面还有一个hashCode(Array)方法,根据指定数组的内容返回哈希码;这里普及一下什么是哈希码:
在Java中,哈希码代表了对象的一种特征,例如我们判断某两个字符串是否==,如果其哈希码相等,则这两个字符串是相等的。其次,哈希码是一种数据结构的算法。常见的哈希码的算法有:
(1):Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。
(2):String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串内容相同,返回的哈希码也相同。
(3):Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integer i1=new Integer(100),i1.hashCode的值就是100 。由此可见,2个一样大小的Integer对象,返回的哈希码也一样。
int [] c1=a;
System.out.println(Arrays.hashCode(a));-- 112607991
System.out.println(Arrays.hashCode(c1));-- 112607991
System.out.println(Arrays.hashCode(b));-- 40055190
System.out.println(Arrays.hashCode(c));--1843762319
可以看出,地址相同则同一个数组,但是在String类里面重写了该方法,就像重写了equals方法一样;
以上就是关于Arrays里面的常用的一下方法;接下来介绍一下与之对应的在集合中的Collections方法:
二.Collection和Collections不同,前者是集合的操作类,后者是集合接口;
Collections提供的常用静态方法有以下几种:
(1):sort():排序;
(2):reverse():反转元素顺序;
(3):max()\min():查找最大、最小值;
(4):binarySearch():查找;
下面来进行介绍:
(1):sort():排序;
list.add("apple");
list.add("banner");
list.add("orange");
Collections.sort(list);
for (String m : list
) {
System.out.print(m+"\t");
}
结果:apple banner orange//按照字母进行排序;
(2):reverse():反转元素顺序;
Collections.reverse(list);
for (String s : list
) {
System.out.println(s);
}
结果: orange banner apple
(3):max()\min():查找最大、最小值;
System.out.println(Collections.max(list));
System.out.println(Collections.min(list));
(4):binarySearch():查找;
System.out.println("查找特定元素");
System.out.println(Collections.binarySearch(list, "orange"));
查找特定元素
2
以上只是针对集合中只有单个属性进行的系统判断,且该属性要么是数字,要么是字母;也就是可以根据自然顺序进行判断,按照数字大小或者是按照字母表的顺序来进行判断;
在JAVA中,如果想要实现一个类的对象之间的比较大小,那么这个类就要实现Comparable接口。此接口强行对实现它的每一个类的对象进行整体排序,这种排序被称为类的自然排序,类的comparaTo()方法被称为它的自然比较方法,此方法用于比较此对象与指定对象的顺序,如果该对象小于,等于,或者大于指定对象,则分别返回负整数,零或整数。
实现此接口的对象列表(和数组)可以通过Collections.sort()方法(和Arrays.sort()方法)进行自动排序;
public class Student implements Comparable
public int compareTo(Object obj) {
Student student = (Student) obj;
if (this.age == student.age) {
return 0;
} else if (this.age > student.age) {
return 1;
} else {
return -1;
}
}
重写Comparable接口中的compareTo()方法后,才能使用Collections.sort();并且这种排序只能针对List有序的接口,像Map和Set因为无序都不行,注意:List接口中的存放的元素,必须实现了Comparable接口的元素才可以!