从头认识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提供的数组的有用功能。


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

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

文件夹



posted @ 2018-03-31 18:15  zhchoutai  阅读(111)  评论(0编辑  收藏  举报