数组Arrays类
Array和Arrays的区别
Array是java.lang.reflect下的一个类,并且不能被new出来,也就是不能被实例化。
Arrays是java.util包下的一个工具类,提供了许多对数组操作的静态方法。
java.util.Arrays(静态)类
以下只以int类型数组为例,其他数据类型同。
equalse()方法
public static boolean equals(int[] a,int[] a2):如果两个指定的int数组(值)彼此相等 ,则返回true 。
public static boolean equals(int[] a, int[] a2) {
if (a==a2)//判断是否一个引用
return true;
if (a==null || a2==null)//判断是否为null
return false;
int length = a.length;
if (a2.length != length)//比较数组长度
return false;
for (int i=0; i<length; i++)//逐个比较值
if (a[i] != a2[i])
return false;
return true;
}
sort()方法
一般要继承并实现Comparable接口,重写compareTo()
public static void sort(int[] a):按照数组顺序排列指定的数组。
- Arrays.sort():
- 数组中的元素数量大于286 使用归并排序算法
- 数组中的元素数量小于47使用插入排序算法
- 数组元素数量>47 <286 使用快速排序算法
toString()方法
public static String toString(int[] a):返回指定数组的内容的字符串表示形式。
学生类
- 重写compareTo(),自定义排列顺序。
package ClassDemo.Arrayskey;
public class Student implements Comparable<Student>{
//定义私有属性
private String name;
private int id;
// 该类的构造方法
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int id) {
super();
this.name = name;
this.id = id;
}
public Student( int id,String name) {
super();
this.name = name;
this.id = id;
}
// getXxx()与setXxx()成员方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
// 重写toString()以及compareTo()方法
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
@Override //自定义规则
public int compareTo(Student o) {
return (this.id - o.id);
}
}
代码演示
package ArraysDemo;
import java.util.Arrays;
public class ArraysFun {
public static void main(String[] agrs) {
// 定义基本类型数组
int[] a = {1,2,4,3,6,5};
int[] b = {1,2,4,3,6,5};
int[] c = {4,6,7,9,2,0};
System.out.println(Array.get(a, 1));// 2 按照索引获得相关的值
System.out.println(Array.getLength(a));// 6 得到数组长度
// 调用equale()方法比较两个数组值
System.out.println(a == b);//比较地址
System.out.println(Arrays.equals(a, b));//比较值
// 调用sort()方法对数组排序
Arrays.sort(c);//对数组进行排序
System.out.println(Arrays.toString(c));
System.out.println(Arrays.binarySearch(c, 6));
Arrays.sort(a,0,4);// 对数组的指定区间进行排序
System.out.println(Arrays.toString(a));
// 定义引用类型
Integer i1 = new Integer(2);
Integer i2 = new Integer(8);
Integer i3 = new Integer(3);
Integer i4 = new Integer(7);
Integer i5 = new Integer(5);
// 定义引用类型数组
Integer[] integers = new Integer[5];
// 将引用类型添加到数组中
integers[0] = i1;
integers[1] = i2;
integers[2] = i3;
integers[3] = i4;
integers[4] = i5;
// 直接对其进行排序(因为基本引用都实现了Comparable接口
Arrays.sort(integers);
System.out.println(Arrays.toString(integers));
Arrays.sort(integers, Collections.reverseOrder()); // 从大到小排序
System.out.println(Arrays.toString(integers));
// 逆序排序 因为Integer内部已经重写了Compartor(),所以定义一个匿名对象进行逆排序
Arrays.sort(integers,new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
System.out.println(Arrays.toString(integers));
// 自定义引用类型
Student s1 = new Student(1,"JAVA");
Student s2 = new Student(2,"JDK");
Student s3 = new Student(3,"JRE");
Student s4 = new Student(4,"JVM");
Student s5 = new Student(5,"HTML");
// 自定义引用类型数组
Student[] students = new Student[5];
// 将自引用类型添加到引用类型数组中
students[0] =s1;
students[1] =s5;
students[2] =s4;
students[3] =s2;
students[4] =s3;
// 对引用类型进行排序
Arrays.sort(students);
System.out.println(Arrays.toString(students));
// toString()方法其实就贯穿其中,输出数组就调用的该方法
}
}
运行结果:
2
6
false
false
[0, 2, 4, 6, 7, 9]
3
[1, 2, 3, 4, 6, 5]
[2, 8, 3, 7, 5]
[8, 7, 5, 3, 2]
[2, 3, 5, 7, 8]
[8, 7, 5, 3, 2]
[Student [id=1, name=JAVA], Student [id=2, name=JDK], Student [id=3, name=JVM], Student [id=4, name=JRE], Student [id=5, name=HTML]]
懒人写法:
public static void main(String[] args) {
Integer[] array = {3,2,1,4,5};
Arrays.sort(array, Collections.reverseOrder()); // 从大到小排序
System.out.println(Arrays.toString(array)); // 输出 [5, 4, 3, 2, 1]
}