java Comparable在对象要排序或作比较的时候的简单用法

来源:互联网 发布:js 截取数组 编辑:程序博客网 时间:2024/05/06 10:23
package com.huawei.it.test;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 *
 * @author King
 *
 */
public class StoreBean implements Serializable, Comparable<StoreBean> {
    /**
     * 序列号
     */
    private static final long serialVersionUID = -8660137923076411894L;
    /** 主键 */
    private String num;
    
    /** 工作年限 */
    private String nianXian;

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    public String getNianXian() {
        return nianXian;
    }

    public void setNianXian(String nianXian) {
        this.nianXian = nianXian;
    }

    /**
     * 含参数构造器
     *
     * @param num
     * @param nianXian
     */
    public StoreBean(String num, String nianXian) {
        super();
        this.num = num;
        this.nianXian = nianXian;
    }

    /**
     * 空参构造器
     */
    public StoreBean() {
        super();
    }

    @Override
    public String toString() {
        return "num=" + num + ", nianXian=" + nianXian;
    }

    /**
     * 实现接口CompareTo的方法
     */

    public int compareTo(StoreBean o) {
     

        if (o instanceof StoreBean) {

  System.out.println("注意了,我要调用compareTo方法了");

            StoreBean store = (StoreBean) o;
            

            if (this.num.compareTo(store.getNum()) > 0) {

                return 1;
            } else if (this.num.equals(store.getNum())) {

                return 0;
            } else {
                return -1;
            }
        }
        return -1;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((num == null) ? 0 : num.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        StoreBean other = (StoreBean) obj;
        if (num == null) {
            if (other.num != null)
                return false;
        } else if (!num.equals(other.num))
            return false;
        return true;
    }
}

//==========================================================================================================以下是测试类

package com.huawei.it.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class StoreBeanTest {

    static List<StoreBean> ulist = new ArrayList<StoreBean>();

    static {
        ulist.add(new StoreBean("1", "1"));
        ulist.add(new StoreBean("5", "5"));
        ulist.add(new StoreBean("4", "4"));
        ulist.add(new StoreBean("2", "2"));
        ulist.add(new StoreBean("8", "8"));
    }
//-------------------------------------------------------------
    static StoreBean[] storeArr = new StoreBean[5];

    static {
        storeArr[0] = new StoreBean("1", "1");
        storeArr[1] = new StoreBean("4", "4");
        storeArr[2] = new StoreBean("2", "2");
        storeArr[3] = new StoreBean("7", "7");
        storeArr[4] = new StoreBean("5", "5");
    }
//----------------------------------------------------------------------------------------------------------------------------------------------------------测试
    public static void main(String[] args) {
      
         collections();
         arr() ;
    }
    /**
     * 方法1:集合 的方法,排序,对象只有在实现了compareble方法才可以进行对比,y用sort排序
     */
    public static void collections() {
        System.out.println("----------collection------------");

        Collections.sort(ulist);//排序,在此过程中jvm偷偷的调用StoreBean类自己的compareTo方法;

        for (StoreBean stu : ulist) {
            System.out.println("Num---->" + stu.getNum() + ", nainxian--->"
                    + stu.getNianXian());
        }
    }
    
    //collections是封装了集合的很多静态方法,为集合服务
    /**
     * 方法2:数组的方法,排序,对象只有在实现了compareble方法才可以进行对比,y用sort排序;
     * compareto方法是在比较的时候底层进行了调用,我们看不到
     */
    public static void arr() {
        System.out.println("----------array------------");

        Arrays.sort(storeArr);//排序,在此过程中jvm调用StoreBean类自己的compareTo方法;

        for (int i = 0; i < storeArr.length; i++) {
            System.out.println("Num---->" + storeArr[i].getNum()
                    + ", nainxian--->" + storeArr[i].getNianXian());
        }
    }
}
//-----------------------------------------------------------------------------------------------------------------------------------打印结果


----------collection开始------------
注意了,我要调用compareTo方法了
注意了,我要调用compareTo方法了
注意了,我要调用compareTo方法了
注意了,我要调用compareTo方法了
注意了,我要调用compareTo方法了
注意了,我要调用compareTo方法了
注意了,我要调用compareTo方法了
注意了,我要调用compareTo方法了
Num---->1, nainxian--->1
Num---->2, nainxian--->2
Num---->4, nainxian--->4
Num---->5, nainxian--->5
Num---->8, nainxian--->8

----------collection结束---------------

----------------------array开始------------
注意了,我要调用compareTo方法了
注意了,我要调用compareTo方法了
注意了,我要调用compareTo方法了
注意了,我要调用compareTo方法了
注意了,我要调用compareTo方法了
注意了,我要调用compareTo方法了
注意了,我要调用compareTo方法了
注意了,我要调用compareTo方法了
Num---->1, nainxian--->1
Num---->2, nainxian--->2
Num---->4, nainxian--->4
Num---->5, nainxian--->5
Num---->7, nainxian--->7

原创粉丝点击