目标效果:
代码:
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
/**
* 编写一个Book类,该类至少有name和price两个属性。
* 该类要实现Comparable接口,在接口的compareTo()方法中规定两个Book类实例的大小关系为二者的price属性的大小关系。
* 在主函数中,选择合适的集合类型存放Book类的若干个对象,然后创建一个新的Book类的对象,并检查该对象与集合中的哪些对象相等。
* 查询结果:
* 新书:《模式识别》与下列图书:
* Java基础教程
* 数据库技术
* C++基础教程
* 价格相同,具体价格为:29.0元。
*
* @author Vivinia
* @param <Book>
*
*/
public class Book implements Comparable<Book>{
String name;
double piece;
public Book(String name,double piece){
this.name=name;
this.piece=piece;
}
@Override
public int compareTo(Book o) {
if(piece>o.piece)
return 1; //前一个大于后一个,返回1,降序
else if(piece==o.piece)
return 0; //前一个等于后一个,返回0
else
return -1; //前一个小于后一个,返回-1,升序
}
public static void main(String[] args) {
Map<String,Double> bookMap=new LinkedHashMap<String,Double>();
bookMap.put("Java基础课程",29.0);
bookMap.put("Android开发",38.0);
bookMap.put("数据结构",30.0);
bookMap.put("数据库技术",29.0);
bookMap.put("计算机网络技术",32.0);
bookMap.put("C++基础教程",29.0);
Book newBook=new Book("模式识别",29.0);
System.out.println("新书:《模式识别》与下列图书:");
for(Entry<String, Double> b : bookMap.entrySet()){ //遍历map中的每个元素
Book comBook=new Book(b.getKey(),b.getValue()); //将每个元素转换为Book型
if(newBook.compareTo(comBook)==0) //删选比较值为0的,即价格相等的
System.out.println(comBook.name);
}
System.out.println("价格相同,具体价格为:"+newBook.piece+"元。");
}
}
注意一个小问题,就是一开始我实例化都是HashMap,但是发现存进去的数据和插入的顺序不一致,大概因为HashMap散列映射的事,但是换了TreeMap还是不一致,我也不太清楚,最后使用了LinkedHashMap,这个存储顺序和插入一致。