public class ReadingSpeed {
Map<Integer, Customer> customerMap = new Hashtable<Integer, Customer>();
// 输入customerMap的数据
// while(customerStream.hasNext()){
// Customer customer= customerStrem.next();
// customerMap.put(customer.getId(),customer);
//bookid
Map<Integer,Map<Integer,Customer>> bookReaderMap = new Hashtable<Integer,Map<Integer,Customer>>();
void updateReadingSpeeds(int customerID, int bookID, int pageNumber){
if(bookReaderMap.containsKey(bookID)){
Map<Integer, Customer> readers=bookReaderMap.get(bookID);
if(readers.containsKey(customerID)){//有客户
Customer customer=readers.get(customerID);
customer.reFresh(pageNumber);
readers.put(customerID, customer);
bookReaderMap.put(bookID, readers);
}else{//没客户
Customer customer=new Customer(customerID);
customer.reFresh(pageNumber);
readers.put(customerID, customer);
bookReaderMap.put(bookID, readers);
}
}else{ //假如连这本书都没有 那肯定也是还没有读这本书的客户了
Map<Integer,Customer> readers=new Hashtable<Integer, Customer>();
Customer customer=readers.get(customerID);
customer.reFresh(pageNumber);
readers.put(customerID, customer);
bookReaderMap.put(bookID, readers);
}
}
void printLeaderboard(int bookID) {
List<Customer> rank= new ArrayList<Customer>();
if(!bookReaderMap.containsKey(bookID)){
System.out.println("no such book");
}else{
Map<Integer,Customer> readers=bookReaderMap.get(bookID);
Iterator<Integer> iter=readers.keySet().iterator();
while(iter.hasNext()){
Integer customerId=(Integer) iter.next();
Customer customer=readers.get(customerId);
rank.add(customer);
}
Collections.sort(rank,new SortByReadingSpeed());
int i=0;
for (Customer customer : rank) {
i++;
System.out.println(customer.getID()+" "+customer.getSpeed()+" "+i);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
private static final class SortByReadingSpeed implements Comparator<Customer> {
public int compare(Customer o1, Customer o2) {
int compare = o2.getSpeed() - o1.getSpeed();
return compare;
}
}
}
——————————————————————————————————————————————————————————-
public class Customer {
private int ID;
private List<Integer> page;
private int speed=0;
public Customer(int ID){
this.ID=ID;
this.page=new ArrayList<Integer>();
}
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public List<Integer> getPage() {
return page;
}
public void setPage(List<Integer> page) {
this.page = page;
}
public void reFresh(int pageNum){
this.page.add(pageNum);
}
public int getSpeed() {
return speed;
}
public void setSpeed(List<Integer> pages) {
int maxSpeed=0;
int time=pages.size()-1;
for(int i=0;i<10;i++){
if(time<=1){
break;
}
int currentSpeed=pages.get(time)-pages.get(time-1);
time--;
if(currentSpeed>maxSpeed){
maxSpeed=currentSpeed;
}
}
this.speed=maxSpeed;
}
}