黑马程序员技术交流社区
标题:
比较器中如何体现才能实现这一需求?
[打印本页]
作者:
陈延真
时间:
2013-5-27 21:26
标题:
比较器中如何体现才能实现这一需求?
本帖最后由 陈延真 于 2013-5-30 21:27 编辑
要求:同姓名同年龄即为同一个人。
请按照姓名的长度从短到长,如果长度一样,请按年龄从大到小排序。
class TreeMapDemo {
public static void main(String[] args) {
// 创建集合对象
TreeMap<Student, String> hm = new TreeMap<Student, String>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
if(s1.getName().equals(s2.getName())){
return 0;
}else{
int num = s1.getName().length()-s2.getName().length();
int num2 = (num == 0) ? s2.getAge()-s1.getAge(): num;
}
return num2;
}
});
// 创建元素对象
Student s1 = new Student("lingqingxia", 25);
Student s2 = new Student("linzhiling", 35);
Student s3 = new Student("linxinru", 45);
Student s4 = new Student("lingqingxia", 25);
Student s5 = new Student("linzixiang", 55);
Student s6 = new Student("linzixianx", 55);
// 添加元素
hm.put(s1, "北京");
hm.put(s2, "上海");
hm.put(s3, "天津");
hm.put(s4, "湖北");
hm.put(s5, "重庆");
// 遍历
Set<Student> set = hm.keySet();
for (Student key : set) {
String value = hm.get(key);
System.out.println(key.getName() + "***" + key.getAge() + "***"
+ value);
}
}
}
作者:
陈潜
时间:
2013-5-27 22:36
class Demo {
public static void main(String[] args) {
// 创建集合对象
TreeMap<Student, String> hm = new TreeMap<Student, String>(
new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
if (s1.getName().equals(s2.getName()) && s1.getAge()==s2.getAge()) { //同姓名同年龄即为同一个人,你没有加年龄
return 0;
} else {
if(s1.getName().length()- s2.getName().length() != 0) //先判断名字长度
return s1.getName().length()- s2.getName().length();
else{ //如果相同就判断年龄大小
return s2.getAge() - s1.getAge();
}
}
}
});
// 创建元素对象
Student s1 = new Student("lingqingxia", 25);
Student s2 = new Student("linzhiling", 35);
Student s3 = new Student("linxinru", 45);
Student s4 = new Student("lingqingxia", 25);
Student s5 = new Student("linzixiang", 55);
Student s6 = new Student("linzixianx", 55); //这个没放啊。。定义了干吗?
// 添加元素
hm.put(s1, "北京");
hm.put(s2, "上海");
hm.put(s3, "天津");
hm.put(s4, "湖北");
hm.put(s5, "重庆");
// 遍历
Set<Student> set = hm.keySet();
for (Student key : set) {
String value = hm.get(key);
System.out.println(key.getName() + "***" + key.getAge() + "***"
+ value);
}
}
}
作者:
Super_Class
时间:
2013-5-28 08:45
name是String类型的。String类实现了Comparable接口。
只需要用int tmp = s1.name.lenth()-s2.name.lenth();//进行姓名长度比较。返回一个int类型的值
return tmp = 0? s1.age-s2.age:tmp; //如果长度相同,按照年龄排序。否则直接返回
作者:
陈延真
时间:
2013-5-28 20:48
陈潜 发表于 2013-5-27 22:36
class Demo {
public static void main(String[] args) {
// 创建集合对象
失误,失误,哈哈。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2