import java.util.*;
class CompareInt implements Comparable {
int i;
int j;
public CompareInt(int i, int j) {
this.i = i;
this.j = j;
}
public int compareTo(Object rv) {
int var = ((CompareInt) rv).i;
return ((i == var) ? 0 : (i > var ? 1 : -1));
}
public String toString() {
return "i=" + i + ","+"j=" + j;
}
}
class CompareIntComparator implements Comparator{
public int compare(Object arg0, Object arg1) {
int j1=((CompareInt)arg0).j;
int j2=((CompareInt)arg1).j;
return ((j1==j2)? 0:(j1<j2? -1:1));
}
}
public class Compare {
public static void main(String[] args) {
CompareInt[] c;
c = new CompareInt[] { new CompareInt(2, 1), new CompareInt(4, 2),
new CompareInt(1, 3), new CompareInt(5, 3) };
(1) Arrays.sort(c);
for (int i = 0; i < c.length; i++) {
System.out.println(c[i]);
}
(2)Arrays.sort(c,Collections.reverseOrder());
System.out.println("-------------");
for (int i = 0; i < c.length; i++) {
System.out.println(c[i]);
}
System.out.println("-------------");
(3) Arrays.sort(c,new CompareIntComparator());
for(int i=0;i<c.length;i++){
System.out.println(c[i]);
}
}
}
(1)处用的回调思想进行排序,要进行排序的对象必须实现接口Comparable,如果在调用Array.sort()时,对象没有实现Comparable接口时会抛出异常ClassCastException,
(2)和睦(3)处用的是策略设计模式,可以使对象用不同的排序方法进行排序,而不用拘泥于对象本身实现的方法.
字符串的排序是由语言支持的,如下:
import java.util.*;
/*class Compare implements Comparator{
public int compare(Object arg0, Object arg1) {
String str1=(String)arg0;
String str2=(String)arg1;
return str1.toLowerCase().compareTo(str2.toLowerCase());
}
}*/
public class StringSort {
private static String[] str = { "whl", "nj", "java", "jsp", "struts",
"Ops", "Quse" };
public static void main(String[] args) {
System.out.println(Arrays.asList(str));
Arrays.sort(str);
System.out.println(Arrays.asList(str));
int j=Arrays.binarySearch(str, "java");
System.out.println(j);
int i=Arrays.binarySearch(str, "ko");
System.out.println(i);
System.out.println("-------------");
Arrays.sort(str, new Comparator() {
public int compare(Object arg0, Object arg1) {
String str1 = (String) arg0;
String str2 = (String) arg1;
return str1.toLowerCase().compareTo(str2.toLowerCase());
};
}
);
System.out.println(Arrays.asList(str));
int var = Arrays.binarySearch(str, "jsp", new Comparator() {
public int compare(Object arg0, Object arg1) {
String str1 = (String) arg0;
String str2 = (String) arg1;
return str1.toLowerCase().compareTo(str2.toLowerCase());
};
});
System.out.println(var);
}
}
但是String的排序是先大写后小写的,如果不想用这种方法,可以用前面介绍过的策略模式,用不同的方法进行排序,如上面用一个匿名内部类.
如果对数组已经进行了排序,那么就可以对它进行查找了,不能对没有排序的数组进行查找,
如果要找的元素没有找到,它返回一个值,这个值的计算方法是-(插入点)-1,如果对数组排序时使用了Comparator那么在查找时出必须用上这个Comparator