酷比Children
2021-10-25 13:51
采纳率: 0%
浏览 60

定义一个Book类,该类有四个成员变量:书的编号id、书名name、书的价格price、出版日期date。并重写Object类的toString()方法。定义测试类BookUseComparator

       new Book(11, "程序设计", 59.8, new GregorianCalendar(2009, 0, 1))

 

        new Book(2, "操作系统", 89.68, new GregorianCalendar(2008, 7, 8))

        new Book(3, "中国历史", 35.8, new GregorianCalendar(2008, 6, 8)) 

要求分别按照正常加入的顺序、以及按照书的编号、书的价格、书的出版日期升序输出。

测试结果如下:

 

package pack;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.GregorianCalendar;

public class BookUseComparator {
public static void main(String[] args) {
	 ArrayList<BOOk> array = new ArrayList<BOOk>();
	BOOk bk = new BOOk(11, "程序设计", 59.8, new GregorianCalendar(2009, 0, 1));
	BOOk bk1 = new BOOk(2, "操作系统", 89.68, new GregorianCalendar(2008, 7, 8));
	BOOk bk2 = new BOOk(3, "中国历史", 35.8, new GregorianCalendar(2008, 6, 8));
array.add(bk);
array.add(bk1);
array.add(bk2);
System.out.println("按照正常顺序排序如下");
display(array);
System.out.println("-------------------------");
System.out.println("按照书的编号从小到大排列");
Collections.sort(array, new Comparator<BOOk>() {

	@Override
	public int compare(BOOk o1, BOOk o2) {
		// TODO Auto-generated method stub
		int num1=o1.getId()-o2.getId();
		return num1;
	}
	
});
display(array);
System.out.println("-------------------------");
System.out.println("按照书的价格从小到大排列");
Collections.sort(array, new Comparator<BOOk>() {

	@Override
	public int compare(BOOk o1, BOOk o2) {
		// TODO Auto-generated method stub
        Double d1 = new Double(o1.getPrice());
        Double d2 = new Double(o1.getPrice());
		int num1=d1.compareTo(d2);
		int num2=num1==0?o2.getId()-o1.getId():num1;
		return num2;
	}
});
display(array);
System.out.println("-------------------------");
System.out.println("按照书的出版日期从小到大排列");
Collections.sort(array, new Comparator<BOOk>() {

	@Override
	public int compare(BOOk o1, BOOk o2) {
		// TODO Auto-generated method stub
       
		int num1=o1.getDate().compareTo(o2.getDate());
		int num2=num1==0?o2.getId()-o1.getId():num1;
		return num2;
	}
});
display(array);
}

private static void display(ArrayList<BOOk> array) {
	// TODO Auto-generated method stub
	for(BOOk b:array) {
		System.out.println(b);
	}
}
}

 Demo中的几点说明;

1.使用List接口中ArrayList的实现类,该实现类内部是一个数组结构,在查找和遍历元素十分方便。该类的泛型为<Book>类型。

2.使用array.add()方法把Book类型的数据添加进入集合中。同时输出的时候重新定义了一个display()方法,

 

private static void display(ArrayList<BOOk> array) {
	// TODO Auto-generated method stub
	for(BOOk b:array) {
		System.out.println(b);
	}
}

该方法的参数必须是ArrayList<book>类型,方法内部使用了一个增强for循环进行遍历。

2.使用集合工具类Collections中的sort方法, 并且以定制排序方式进行,Comparator方法是在外部定制排序规则,然后作为排序策略参数传递给某些类,比如Collections.sort和Arrays.sort。使用匿名内部类创建步骤分为:

(1)创建一个Comparator接口的实现类,并赋值给一个对象。

(2)重写compare方法。

Collections.sort(array, new Comparator<BOOk>() {

	@Override
	public int compare(BOOk o1, BOOk o2) {
		// TODO Auto-generated method stub
       
		int num1=o1.getDate().compareTo(o2.getDate());
		int num2=num1==0?o2.getId()-o1.getId():num1;
		return num2;
	}
});

 2.Book类的定义

 

package pack;
import java.util.Date;
import java.util.GregorianCalendar;
public class BOOk {
private int id;
private String name;
private float price;
private GregorianCalendar date;

public int getId() {
	return id;
}

public void setId(int id) {
	this.id = id;
}

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

public float getPrice() {
	return price;
}

public void setPrice(float price) {
	this.price = price;
}

public GregorianCalendar getDate() {
	return date;
}

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

public BOOk(int id, String name, double d, GregorianCalendar gregorianCalendar) {
	super();
	this.id = id;
	this.name = name;
	this.price = (float) d;
	this.date = gregorianCalendar;
}

@Override
public String toString() {
	return  id +"\t"+ name +"\t\t "+price+"\t"+String.format("%tY年%<tm月%<td日", date);
}

}

 1.对于定义日期,我们最初想的是Date,但由于Date没有考虑国际化问题,JDK1.1之后就被Calendar类所取代,由于Calendar类是抽象类,不能被实例化,一般需要使用静态方法getInstance来得到一个Calender对象,或者使用子类GregorianCalendar来创建对象。

2.对于日期格式化我们采用的是String.format。

1条回答 默认 最新

相关推荐 更多相似问题