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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© masai158 高级黑马   /  2014-7-24 10:36  /  1246 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 masai158 于 2014-7-28 16:00 编辑

做练习题的时候,就看题目是什么,千万别看他的实现方法和思想。这样就锻炼不到什么。。
现在我已经对下面的题有所领悟。 上传2个附件,我就开始做下面的题了。。
一个是百度 io 训练题,一个则是 我自己做的题。如果需要的拿去看一吧
多多学习io 。没错的。
已完成-IO练习题.zip (2.19 KB, 下载次数: 151)     自己做的.zip (7.61 KB, 下载次数: 147)



TreeMap<String,Integer>  
百度找的题。其他的题都做完了。就差这个了。。.
从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,
        并按重复次数排序,如果次数相同按姓名字母排序:

1,zhangsan,28
2,lisi,35
3,zhangsan,28
4,wangwu,35
5,zhangsan,28
6,lisi,35
7,zhaoliu,28
8,tianqi,35

目前已经解决。大家有更简单的方法吗??
http://bbs.itheima.com/thread-133437-1-1.html

7 个回复

正序浏览
icris 中级黑马 2014-7-28 18:14:40
8#
本帖最后由 icris 于 2014-7-28 18:26 编辑
  1. import java.util.*;

  2. public class Comp {
  3.         public static void main(String[] args) {
  4.                 String[] souce = getSouce();
  5.                 String[] names = getNames(souce);

  6.                 final HashMap<String, Integer> times = countTimes(names);

  7.                 TreeMap<String, Integer> map = getMap(times);

  8.                 System.out.println(map);

  9.         }

  10.         private static TreeMap<String, Integer> getMap(
  11.                         final HashMap<String, Integer> times) {
  12.                 TreeMap<String, Integer> map = new TreeMap<String, Integer>(
  13.                                 new Comparator<String>() {
  14.                                         public int compare(String o1, String o2) {
  15.                                                 Integer i1 = times.get(o1);
  16.                                                 Integer i2 = times.get(o2);
  17.                                                 if (i1 != i2) {
  18.                                                         return i2 - i1;
  19.                                                 }
  20.                                                 return o1.compareTo(o2);
  21.                                         }
  22.                                 });
  23.                 map.putAll(times);
  24.                 return map;
  25.         }

  26.         private static HashMap<String, Integer> countTimes(String[] names) {
  27.                 final HashMap<String, Integer> times = new HashMap<String, Integer>();
  28.                 for (String name : names) {
  29.                         times.put(name, times.containsKey(name) ? times.get(name) + 1 : 1);
  30.                 }
  31.                 return times;
  32.         }

  33.         private static String[] getNames(String[] souce) {
  34.                 String[] names = new String[8];
  35.                 for (int i = 0; i < names.length; i++) {
  36.                         names[i] = souce[i].replaceAll("[\\d,]", "");
  37.                 }
  38.                 return names;
  39.         }

  40.         private static String[] getSouce() {
  41.                 String[] souce = { "1,zhangsan,28", "2,lisi,35", "3,zhangsan,28",
  42.                                 "4,wangwu,35", "5,zhangsan,28", "6,lisi,35", "7,zhaoliu,28",
  43.                                 "8,tianqi,35" };
  44.                 return souce;
  45.         }
  46. }
复制代码


去掉了与题目关系不大的IO部分(雾),把排序写了一下
回复 使用道具 举报
回复 使用道具 举报
{:2_30:}{:2_30:}{:2_30:}{:2_30:}{:2_30:}

io 训练题一在上面了。切记不要看实现方法的
回复 使用道具 举报
杨冬冬 发表于 2014-7-24 11:24
把你写好的程序拿出来,让我们看看,给你点参考意见

明天早上把我的做的全部发上面。都是IO的。不过我就是看了题目。他的答案我都没看。而且到现在做完了也没有看过
回复 使用道具 举报
把你写好的程序拿出来,让我们看看,给你点参考意见
回复 使用道具 举报
给TreeMap构造函数传入比较器
TreeMap tm = new TreeMap(new ComparatorByName());ComparatorByName这个是自定义比较器。
或者你定义的Person类实现Comparable接口。
回复 使用道具 举报
{:2_30:}  我自己顶一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马