从头认识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提供的数组的有用功能。
这一章节就到这里。谢谢。
-----------------------------------