A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李计伟 中级黑马   /  2012-11-14 22:21  /  5682 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李计伟 于 2012-11-15 11:37 编辑

用比较器可以自定义比较键的大小,怎么才能求出集合中元素最大的值是多少. 我要的是值不是键
比如tm.put(new person("张三" 20),15) ;        tm.put (new person("李四"19), 16);    tm.put (new person("王五"18), 11);         
最大的值为16

14134141.jpg (17.57 KB, 下载次数: 29)

14134141.jpg

评分

参与人数 1技术分 +1 收起 理由
杨千里 + 1

查看全部评分

3 个回复

倒序浏览
用Map.Entry 获取value 之后你想怎么排序 就怎么排序~~
回复 使用道具 举报
  1. public class MainClass {

  2.         public static void main(String[] args) {
  3.                 Map<Person, Integer> tm = new TreeMap<Person, Integer>();
  4.                 tm.put(new Person("张三", 24), 15);
  5.                 tm.put(new Person("李四", 23), 8);
  6.                 tm.put(new Person("王五", 22), 23);
  7.                 tm.put(new Person("刘六", 21), 35);
  8.                 tm.put(new Person("田七", 25), 16);
  9.                 Set<Person> set = tm.keySet();
  10.                 Iterator<Person> i = set.iterator();
  11.                 Person p = null;
  12.                 if (i.hasNext()) {
  13.                         p = i.next();
  14.                 }
  15.                 while (i.hasNext()) {
  16.                         Person tmp = i.next();
  17.                         if (tm.get(p) < tm.get(tmp)) {
  18.                                 p = tmp;
  19.                         }
  20.                 }
  21.                 System.out.println(p + "的值最大,为:" + tm.get(p));
  22.         }
  23. }

  24. class Person implements Comparable<Person> {
  25.         private String name;
  26.         private int age;

  27.         public Person(String name, int age) {
  28.                 this.name = name;
  29.                 this.age = age;
  30.         }

  31.         public int compareTo(Person person) {
  32.                 int result = 0;
  33.                 if (this.age < person.age) {
  34.                         result = -1;
  35.                 } else if (this.age > person.age) {
  36.                         result = 1;
  37.                 }
  38.                 return result;
  39.         }

  40.         public String toString() {
  41.                 return age + "岁的" + name;
  42.         }
  43. }
复制代码
运行结果为
21岁的刘六的值最大,为:35

自己写得...迭代器每次取出比较找到最大的...

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
859006823 发表于 2012-11-16 17:35
能帮我讲下compareTo()方法吗?还有,我向TreeMap集合中添加了好几个对象,但是集合的值只有最后一次添加 ...
  1. public int compareTo(Person person) {}
复制代码
compareTo方法来自于java.lang包中的interface Comparable<T>
用于排序用 当小于返回负数 等于返回0 大于返回正数
因为你用的是TreeMap<K,V>实现了SortedMap<K,V>所以放进Map中的Key需要加上interface Comparable<T>接口排序
否则会抛出ClassCastException的异常
如我上面写得代码会抛出:
Exception in thread "main" java.lang.ClassCastException: com.test.TreeMap.Person cannot be cast to java.lang.Comparable

因为是Map,存储用的是键值对K-V的形式,而主键不能重复放进去,其实取出所有的主键就是一个Set类的集合,所以当Key是一样的时候只能加进去一次

我没觉得这个代码中用TreeMap有什么用
要想添加多次的话用List下的ArrayList,LinkList,然后排序可以用Comparator接口实现
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马