Java类对象排序问题---如何对不同类的所有对象进行排序

问题如下:设有A1、A2两个类,其中均含有属性:java.util.Date time;A1中含有若干个属性a1…an,A2中含有若干个属性b1…bm,现在有A1的若干个实例 ,A2的若干个实例。现在按照time属性进行排序,依次输出A和B的所有实例。

我的设想是先创建一个公共父类,其中含有time属性,并且实现comparable接口。

//公共父类
class A implements Comparable<A> {
    private Date date;

    @Override
    public String toString() {
        return "A [date=" + date + "]";
    }

    public A(Date date) {
        super();
        this.date = date;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    @Override
    public int compareTo(A o) {
        // TODO Auto-generated method stub
        long i = this.getDate().getTime() - o.getDate().getTime();
        if (i == 0) {
            return 0;
        } else if (i > 0) {
            return 1;
        } else {
            return -1;
        }
    }
}

子类A1继承A类,并增添其余的属性:

//类A1
class A1 extends A {
    public A1(Date date, char a1) {
        super(date);
        A1 = a1;
    }

    private char A1;

    public char getA1() {
        return A1;
    }

    public void setA1(char a1) {
        A1 = a1;
    }

    @Override
    public String toString() {
        return "A1 [A1=" + A1 + "]";
    }
}

子类A2同理继承A类:

//类A2
class A2 extends A {
    public A2(Date date, String a2) {
        super(date);
        A2 = a2;
    }

    @Override
    public String toString() {
        return "A2 [A2=" + A2 + "]";
    }

    public String getA2() {
        return A2;
    }

    public void setA2(String a2) {
        A2 = a2;
    }

    private String A2;
}

再写一个测试类实现需求:

public class Test1 {
    @Test
    public void es() {
        List<A> aa = new LinkedList<A>();//用于存放A1类对象
        List<A> bb = new LinkedList<A>();//用于存放A2类对象

        aa.add(new A1(new Date(1111), 'a'));
        aa.add(new A1(new Date(3333), 'b'));
        aa.add(new A1(new Date(5555), 'c'));
        aa.add(new A1(new Date(7777), 'd'));

        bb.add(new A2(new Date(2222), "A"));
        bb.add(new A2(new Date(4444), "B"));
        bb.add(new A2(new Date(6666), "C"));
        bb.add(new A2(new Date(8888), "D"));

        List<A> ALL = new LinkedList<>();//用于存放所有的对象
        ALL.addAll(aa);//添加对象
        ALL.addAll(bb);
        for (int i = 0; i < ALL.size(); i++) {//遍历

        //倘若对象为A1,则强转为A1,并进行打印。
            if (ALL.get(i) instanceof A1) {
                A1 a12 = (A1) ALL.get(i);
                System.out.print(a12.getA1());
            } else {//倘若对象为A2,则强转为A2,并进行打印。
                A2 a12 = (A2) ALL.get(i);
                System.out.print(a12.getA2());
            }
        }
        System.out.println();
        System.out.println("-------------------");
        Collections.sort(ALL);
        for (int i = 0; i < ALL.size(); i++) {
            if (ALL.get(i) instanceof A1) {
                A1 a12 = (A1) ALL.get(i);
                System.out.print(a12.getA1());
            } else {
                A2 a12 = (A2) ALL.get(i);
                System.out.print(a12.getA2());
            }
        }
    }
}

运行结果:

abcdABCD
-------------------
aAbBcCdD
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值