记一次关于Comparable的问题

学了Comparable接口后,我们知道了Comparable可以对每个类的对象进行排序。
由于书上练习是给出具体的某个数组对象,例如:

L_ComparaDemo[] c=new L_ComparaDemo[]{
	new L_ComparaDemo(),new L_ComparaDemo()//一一列出
};

上面的数据是在对象数组中一一列出具体的对象。
于是我得到一的思考,既然可以队每个类的对象排序,那么对象数组能否自己定义一个对象,并且进行赋值对象,且不用一一列出呢?于是我写了一个代码:

package com.lianxi_3;
//L03_Comparable类
public class L03_Comparable implements Comparable{

	@Overridef 
	private int i;
	public int getI() {
		return i;
	}
	public void setI(int i) {
		this.i = i;
	}
	public int compareTo(Object o) {
		// TODO Auto-generated method stub
		if(o instanceof L03_Comparable) {
			if(i>((L03_Comparable)o).i) {
				return 1;
			}else if(i<((L03_Comparable)o).i){
				return -1;
			}else
				return 0;
		}else
			throw new ClassCastException("不是该类对象,不能比较");
		}
	public String toString(){
		return""+i;
	}


}


//主程序
package com.lianxi_3;

import java.util.Arrays;
import java.util.Scanner;

public class L03_ComparableDemo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i;
		Object[] a1 = new Object[16];// 定义一个对象数组a1[]
		System.out.println("请输入要比较的数:");
		for (int a = 0; a < 16; a++) {
			Scanner sc = new Scanner(System.in);
			i = sc.nextInt();
			a1[a] = new L03_Comparable();// 对象数组中的每一个对象元素赋上一个L03_Comparable()新对象
			((L03_Comparable) a1[a]).setI(i);// 每一个L03_Comparable()新对象的赋值
			if (a == 15)
				sc.close();// 关闭流
		}

		L03_Comparable[] cp = new L03_Comparable[16];// 定义一个数组对象cp[]
		for (int j = 0; j < 16; j++) {
			cp[j] = (L03_Comparable) a1[j];// 数组对象中的每一个对象赋上a1[],i与((L03_Comparable)o).i
		}
		System.out.println("*************排序前输出***************");
		System.out.println(Arrays.asList(cp));//输出cp中排序前的元素列表
		System.out.println("*************排序后输出***************");
		Arrays.sort(cp);//排序数组对象cp[]
		System.out.println(Arrays.asList(cp));//输出cp中排序后的元素列表
	}
}

我发现:
1.定义抽象的对象数组,可以Object[] a1 = new Object[16],即可以用Object类,这个类非常实用。

2.抽象定义的对象数组cp[]并不能直接调用L03_Comparable类中的setI()方法,虽然不会报错,但是无法把输入数据传输到L03_Comparable类比较。所以我折中重新定义了一个抽象类数组a1[],采用((L03_Comparable) a1[a]).setI(i)的办法来给每个对象的i赋值。

3.注意键入数据完成后Scanner的流必须关闭。

4.cp[]不用一一列出对象元素的方法:

L03_Comparable[] cp = new L03_Comparable[16];
for (int j = 0; j < 16; j++) {
			cp[j] = (L03_Comparable) a1[j];// 数组对象中的每一个对象赋上a1[],i与((L03_Comparable)o).i
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值