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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© IT_JM 中级黑马   /  2013-10-10 09:08  /  1019 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

五、Map集合的应用及扩展
1、何时使用Map集合:当量数据之间存在着映射关系的时候,就应该想到使用Map集合。
2、示例:
        获取该字符串中的字母出现的次数,如:"sjokafjoilnvoaxllvkasjdfns";希望打印的结果是:a(3)c(0).....
        通过结果发现,每个字母都有对应的次数,说明字母和次数之间有映射关系。代码如下:
  1. 1. /*
  2. 2. 思路:1、将字符串转换为字符数组
  3. 3. 2、定义一个TreeMap集合,用于存储字母和字母出现的次数
  4. 4. 3、用数组去遍历集合,如果集合中有该字母则次数加1,如果集合中没有则存入
  5. 5. 4、将TreeMap集合中的元素转换为字符串
  6. 6. */
  7. 7. package TreeMapTest;
  8. 8. import java.util.*;
  9. 9.
  10. 10. class CharCount
  11. 11. {
  12. 12. public static void main(String[] args)
  13. 13. {
  14. 14. String s="sdfgzxcvasdfxcvdf";
  15. 15. System.out.println("s中各字母出现的次数:"+charCount(s));
  16. 16. }
  17. 17.
  18. 18. //定义一个方法获取字符串中字母出现的次数
  19. 19. public static String charCount(String str)
  20. 20. {
  21. 21. char[] cha=str.toCharArray();//转换为字符数组
  22. 22.
  23. 23. //定义一个TreeMap集合,因为TreeMap集合会给键自动排序
  24. 24. TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>();
  25. 25.
  26. 26. int count=0;//定义计数变量
  27. 27. for (int x=0;x<cha.length ;x++ )
  28. 28. {
  29. 29. if(!(cha[x]>='a'&&cha[x]<='z'||cha[x]>='A'&&cha[x]<='Z'))
  30. 30. continue;//如果字符串中非字母,则不计数
  31. 31. Integer value=tm.get(cha[x]);//获取集合中的值
  32. 32. if(value!=null)//如果集合中没有该字母,则存入
  33. 33. count=value;
  34. 34. count++;
  35. 35. tm.put(cha[x],count);//存入键值对
  36. 36. count=0;//复位计数变量
  37. 37. }
  38. 38.
  39. 39. StringBuilder sb=new StringBuilder();//定义一个容器
  40. 40.
  41. 41. //遍历集合,取出并以题目格式存入容器中
  42. 42. for(Iterator<Character> it=tm.keySet().iterator();it.hasNext();)
  43. 43. {
  44. 44. Character ch=it.next();
  45. 45. Integer value=tm.get(ch);
  46. 46. sb.append(ch+"("+value+")");
  47. 47. }
  48. 48. return sb.toString();//返回字符串
  49. 49. }
  50. 50. }
复制代码
六、Map扩展知识
        在很多项目中,应用比较多的是一对多的映射关系,这就可以通过嵌套的形式将多个映射定义到一个大的集合中,并将大的集合分级处理,形成一个体系。
如:
  1. 1. /*
  2. 2. map扩展知识。
  3. 3. map集合被使用是因为具备映射关系。
  4. 4. 以下是班级对应学生,而学生中学号对应着姓名的映射关系:
  5. 5. "yureban" Student("01" "zhangsan");
  6. 6.
  7. 7. "yureban" Student("02" "lisi");
  8. 8.
  9. 9. "jiuyeban" "01" "wangwu";
  10. 10. "jiuyeban" "02" "zhaoliu";
  11. 11.
  12. 12. 就如同一个学校有多个教室。每一个教室都有名称。
  13. 13. */
  14. 14. import java.util.*;
  15. 15.
  16. 16. class MapExpandKnow
  17. 17. {
  18. 18. public static void main(String[] args)
  19. 19. {
  20. 20. //预热班集合
  21. 21. HashMap<String,String> yureban=new HashMap<String,String>();
  22. 22. //就业班集合
  23. 23. HashMap<String,String> jiuyeban=new HashMap<String,String>();
  24. 24. //学校集合
  25. 25. HashMap<String,HashMap<String,String>> czbk=new HashMap<String,HashMap<String,String>>();
  26. 26.
  27. 27. //学校中班级集合和名称的映射
  28. 28. czbk.put("yureban",yureban);
  29. 29. czbk.put("jiuyueban",jiuyeban);
  30. 30.
  31. 31. //预热班级中学号与姓名的映射
  32. 32. yureban.put("01","zhangsan");
  33. 33. yureban.put("02","lisi");
  34. 34.
  35. 35. //就业班级中学号与姓名的映射
  36. 36. jiuyeban.put("01","wangwu");
  37. 37. jiuyeban.put("02","zhouqi");
  38. 38.
  39. 39. //直接显示全部学生信息
  40. 40. getAllStudentInfo(czbk);
  41. 41.
  42. 42. }
  43. 43. //定义一个方法获取全部学生信息,包括在哪个班级,叫什么名字,学号多少
  44. 44. public static void getAllStudentInfo(HashMap<String ,HashMap<String,String>> hm)
  45. 45. {
  46. 46. for (Iterator<String> it=hm.keySet().iterator();it.hasNext() ; )//用keySet取出方式
  47. 47. {
  48. 48. String s= it.next();//班级名称
  49. 49. System.out.println(s+":");
  50. 50. HashMap<String,String> stu=hm.get(s);//班级集合
  51. 51.
  52. 52. getStudentInfo(stu);
  53. 53. }
  54. 54. }
  55. 55.
  56. 56. //获取班级中学生的信息,包括姓名和学号
  57. 57. public static void getStudentInfo(HashMap<String,String> hm)
  58. 58. {
  59. 59. for (Iterator<String> it=hm.keySet().iterator();it.hasNext() ; )
  60. 60. {
  61. 61. String key=it.next();//学号
  62. 62. String value=hm.get(key);//姓名
  63. 63. System.out.println(key+"..."+value);
  64. 64. }
  65. 65. }
  66. 66. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 期待后续力作呀!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马