Arrays(数组)静态工具类

数组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]
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值