使用List实现类添加五本图书,如图所示:
要求:按价格从低到高排序,然后遍历输出
这道题用到的知识点有:List接口、实现类以及相关的方法;迭代器遍历;动态绑定机制;向下转型;冒泡排序
实现代码如下:
package com.wyz.test;
import java.util.ArrayList;
import java.util.List;
public class test{
public static void main(String[] args) {
int temp;
List list = new ArrayList();
list.add(new Book("红楼梦", "曹雪芹", 100));
list.add(new Book("西游记", "吴承恩", 10));
list.add(new Book("水浒传", "施耐庵", 9));
list.add(new Book("三国演义", "罗贯中", 80));
list.add(new Book("西游记", "吴承恩", 10));
int[] price = new int[list.size()];
for(int i = 0; i < list.size(); i++){
Book book = (Book) list.get(i);
price[i] = book.getPrice();
}
for(int i = 0; i < list.size() - 1; i++){
int flag = 0; //标记
for (int j = 0; j < list.size() - i - 1; j++){
if(price[j] > price[j + 1]){
flag = 1; //如果标记没有改变说明已经排序完成,不需要继续进行排序
temp = price[j];
price[j] = price[j + 1];
price[j + 1] = temp;
exchange(list, (Book) list.get(j), (Book) list.get(j + 1), j);
}
}
if(flag == 0){
break;
}
}
for (Object o : list) {
System.out.println(o);
System.out.println("-------------");
}
}
public static void exchange(List list, Book book1, Book book2, int index){
Book book3 = new Book(book1.getName(), book1.getWriter(), book1.getPrice());
list.set(index, book2);
list.set(index + 1, book3);
// 注意不能使用下面的语句进行交换,indexOf()方法会返回第一次出现的下标。
// 第一条语句执行结束后,book2位置已经改变了,第二条语句会返回前一个位置
// list.set(list.indexOf(book1), book2);
// list.set(list.indexOf(book2), book3);
}
}
class Book{
private String name;
private String writer;
private int price;
public String getName() {
return name;
}
public String getWriter() {
return writer;
}
public int getPrice() {
return price;
}
public Book(String name, String writer, int price) {
this.name = name;
this.writer = writer;
this.price = price;
}
@Override
public String toString() {
return "书名:" + name + "\n作者:" + writer + "\n价格:" + price;
}
}
输出结果: