package book;
import java.util.Comparator;
/**
* 比较器类,比较两个参数的大小。一般用于集合或者Map的排序。
*/
public class ComparatorBook implements Comparator<Book> {
public int compare(Book o1, Book o2) {
if(o1==null)return -1;
if(o2==null)return 1;
if(o1==o2)return 0;
if(o1.getSellCount()>o2.getSellCount()){
return 1;
}
if(o2.getSellCount()==o1.getSellCount()){
return 0;
}
return -1;
}
}
package book;
/****
* 实体类
* @author founder
*/
public class Book {
private String bookSN; //图书编号
private int sellCount; //销量
public String getBookSN() {
return bookSN;
}
public void setBookSN(String bookSN) {
this.bookSN = bookSN;
}
public int getSellCount() {
return sellCount;
}
public void setSellCount(int sellCount) {
this.sellCount = sellCount;
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;
public class BookDAO {
/**
* 测试用例
*/
public static void main(String[] args) {
Book book1 = new Book();
book1.setBookSN("SN1");
book1.setSellCount(101);
Book book2 = new Book();
book2.setBookSN("SN2");
book2.setSellCount(102);
Book book3 = new Book();
book3.setBookSN("SN3");
book3.setSellCount(103);
Book book4 = new Book();
book4.setBookSN("SN4");
book4.setSellCount(100);
List<Book> bookList = new ArrayList<Book>();
bookList.add(book1);
bookList.add(book2);
bookList.add(book3);
bookList.add(book4);
BookDAO bookDAO = new BookDAO();
List<Book> sorted = bookDAO.ListSortSellCount(bookList);
for(Book book : sorted){
System.out.println(book.getBookSN()+"\t"+book.getSellCount());
}
}
/***************************************************************************
* 对销量升序
*/
public List<Book> ListSortSellCount(List<Book> bookList) {
ComparatorBook comparator=new ComparatorBook();
List<Book> result = null;
result = bubbleSort(bookList);
result = bubbleSort(bookList,comparator);
result = selectionSort(bookList,comparator);
result = jdkSort(bookList,comparator);
return result;
}
public List<Book> bubbleSort(List<Book> bookList){
System.out.println("冒泡排序算法(不用比较器升序):");
Book[] array = bookList.toArray(new Book[bookList.size()]);
Book temp = null;
for(int i=0;i<array.length;i++){
for(int j=array.length-1;j>i;j--){
if(array[j-1].getSellCount()>array[j].getSellCount()){
temp = array[j];
array[j] = array[j-1];
array[j-1] = temp;
}
}
}
ListIterator<Book> i = bookList.listIterator();
for (int j=0; j<array.length; j++) {
i.next();
i.set(array[j]);
}
return bookList;
}
public List<Book> bubbleSort(List<Book> bookList,ComparatorBook comparator){
System.out.println("冒泡排序算法:");
Book[] array = bookList.toArray(new Book[bookList.size()]);
Book temp = null;
for(int i=0;i<array.length;i++){
for(int j=array.length-1;j>i;j--){
if(comparator.compare(array[j-1], array[j])>0){
temp = array[j];
array[j] = array[j-1];
array[j-1] = temp;
}
}
}
ListIterator<Book> i = bookList.listIterator();
for (int j=0; j<array.length; j++) {
i.next();
i.set(array[j]);
}
return bookList;
}
public List<Book> selectionSort(List<Book> bookList,ComparatorBook comparator){
System.out.println("选择排序算法:");
Book[] array = bookList.toArray(new Book[bookList.size()]);
int index = 0;
Book temp = null;
for(int i=0;i<array.length;i++){
index = i;
for(int j=i+1;j<array.length;j++){
if(comparator.compare(array[index], array[j])>0){
index = j;
}
}
temp = array[index];
array[index] = array[i];
array[i] = temp;
}
ListIterator<Book> i = bookList.listIterator();
for (int j=0; j<array.length; j++) {
i.next();
i.set(array[j]);
}
return bookList;
}
public List<Book> jdkSort(List<Book> bookList,ComparatorBook comparator){
System.out.println("JDK 排序算法:");
Collections.sort(bookList, comparator);
return bookList;
}
}