数组的排序学习!!



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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值