从头认识java-14.4 Java提供的数组的实用功能(2)

接着上一章节,我们继续介绍Java提供的数组的实用功能。

3.元素的对比Comparator

package com.ray.ch14;

import java.util.Arrays;
import java.util.Comparator;

public class Test {
	public static void main(String[] args) {
		MyClass[] myClasses = new MyClass[3];
		MyClass myClass1 = new MyClass();
		MyClass myClass2 = new MyClass();
		MyClass myClass3 = new MyClass();
		myClass1.setId(3);
		myClass2.setId(2);
		myClass3.setId(1);
		myClass1.setName("myClass1");
		myClass2.setName("myClass2");
		myClass3.setName("myClass3");
		myClasses[0] = myClass1;
		myClasses[1] = myClass2;
		myClasses[2] = myClass3;
		Arrays.sort(myClasses, new MyComparator());
		System.out.println(Arrays.toString(myClasses));
	}
}

class MyComparator implements Comparator<MyClass> {

	@Override
	public int compare(MyClass myClass1, MyClass myClass2) {
		return myClass1.getId() > myClass2.getId() ? 1 : 0;
	}
}

class MyClass {

	private int id = 0;

	private String name = "";

	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;
	}

	@Override
	public String toString() {
		return "id:" + id + "&name:" + name;
	}
}

输出:

[id:1&name:myClass3, id:2&name:myClass2, id:3&name:myClass1]

要使用Comparator,就必须实现Comparator接口,主要就是compare方法的实现,这样就可以自定义类的对比,我们上面采用的是id 的对比,id较小的排前面,大的排后面。


4.数组的排序Arrays.sort

接口上面的例子,我们继续扩展,主要是通过Array.sort来对数组排序,上面的例子也有说明。


5.在有序数组中查找。

我们修改一下上面的例子:

package com.ray.ch14;

import java.util.Arrays;
import java.util.Comparator;

public class Test {
	public static void main(String[] args) {
		MyClass[] myClasses = new MyClass[3];
		MyClass myClass1 = new MyClass();
		MyClass myClass2 = new MyClass();
		MyClass myClass3 = new MyClass();
		myClass1.setId(3);
		myClass2.setId(2);
		myClass3.setId(1);
		myClass1.setName("myClass1");
		myClass2.setName("myClass2");
		myClass3.setName("myClass3");
		myClasses[0] = myClass1;
		myClasses[1] = myClass2;
		myClasses[2] = myClass3;
		Arrays.sort(myClasses, new MyComparator());
		System.out.println(Arrays.toString(myClasses));
		System.out.println("myClass2's pos:"
				+ Arrays.binarySearch(myClasses, myClass2, new MyComparator()));
	}
}

class MyComparator implements Comparator<MyClass> {

	@Override
	public int compare(MyClass myClass1, MyClass myClass2) {
		return myClass1.getId() > myClass2.getId() ? 1 : 0;
	}
}

class MyClass {

	private int id = 0;

	private String name = "";

	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;
	}

	@Override
	public String toString() {
		return "id:" + id + "&name:" + name;
	}
}

输出:

[id:1&name:myClass3, id:2&name:myClass2, id:3&name:myClass1]
myClass2's pos:1

我们在里面加入了binarySearch这个二分法查找算法,用它来查找myClass2这个对象在数组里面的位置。

注意:binarySearch对于有序序列的查找是没问题的,但是对于无序序列的查找,就会出现莫名其妙的问题(主要是位置的错误)。


总结:这一章节我们主要介绍了Java提供的数组的实用功能。


这一章节就到这里,谢谢。

-----------------------------------

目录



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值