emm... 9631 words in the article |
you are the th friend who reading now
[TOC]
一. 比较器 (Arrays类)
在之前一直使用 “java.util.Arrays.sort()” 可以实现数组的排序,而Arrays类就是java.util包中提供的一个工具类,这个工具类主要是完成数组有关的操作功能。
在这个类里面存在二分查找法:
public static int binarySearch(byte[] a,byte key)
public static int binarySearch(数据类型[] a, 数据类型 key)
1 2 3 4 5 6 7 8 9
package cn.ngp.demo; import java.util.Arrays; public class TestDemo { public static void main(String[] args) { int[] data = new int[] {1,5,6,2,3,4,9,8,7,10}; java.util.Arrays.sort(data);// 排序 System.out.println(Arrays.binarySearch(data, 9)); } }
Arrays类提供了数据比较: public static boolean equals(数据类型 [] a,数据类型[] a2),只不过借用了equals()方法名称,与Object类的equals()屁关系都没有。
1 2 3 4 5 6 7 8 9
package cn.ngp.demo; import java.util.Arrays; public class TestDemo { public static void main(String[] args) { int[] dataA = new int[] {1,2,3}; int[] dataB = new int[] {1,2,3}; System.out.println(Arrays.equals(dataA, dataB)); } }
要判断数组是否相同,需要顺序完全一致。
其他操作:
填充数组: static void fill(数据类型[] a, 数据类型 val);
将数组变为字符串输出: public static String toString(数据类型 [] a);
1 2 3 4 5 6 7 8 9
package cn.ngp.demo; import java.util.Arrays; public class TestDemo { public static void main(String[] args) { int[] data = new int[10]; Arrays.fill(data, 3); System.out.println(Arrays.toString(data)); } }
以上实际上就属于数组的基本操作,只不过这样的操作在实际的开发里面很少出现。
二. 比较器 Comparable(核心)
下面来观察一下Arrays类中提供的数组排序方法:
对象数组排序: public static void sort(Object[] a);
发现Arrays类里面可以直接利用sort()方法实现对象数组排序。
package cn.ngp.demo; import java.util.Arrays; class Book { private String title; private double price; public Book(String title, double price) { this.title = title; this.price = price; } @Override public String toString() { return "书名:《" + this.title + "》,价格:" + this.price + "元。" + "\n"; } } public class TestDemo { public static void main(String[] args) { Book books[] = new Book[] { new Book("Java从入门到精通", 79.6), new Book("Oracle从入门到精通", 88.6), new Book("Android从入门到精通", 66.9) }; Arrays.sort(books); System.out.println(Arrays.toString(books)); } }
Exception in thread “main” java.lang.ClassCastException: cn.ngp.demo.Book cannot be cast to java.lang.Comparable
at java.util.ComparableTimSort.countRunAndMakeAscending(Unknown Source)
at java.util.ComparableTimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at cn.ngp.demo.TestDemo.main(TestDemo.java:21)