黑马程序员技术交流社区

标题: 求讲解:数据之间的映射关系 [打印本页]

作者: 人生无处不阳光    时间: 2013-12-18 19:16
标题: 求讲解:数据之间的映射关系
本帖最后由 人生无处不阳光 于 2013-12-19 00:28 编辑

在毕老师的视频中,讲到Map 集合时候,总是提到 数据之间的映射关系, 我实在不明白  什么叫映射关系???  求讲解一下   谢谢大神们

比如 :有一道练习题    给一个字符串 asdfabsdfgasdesad  然后让你获取该字符串字母出现的次数
希望打印结果为: a(2) b(1) c(3) .....
作者: 代文娟    时间: 2013-12-18 19:27
Map集合中存的不是键值对吗,那么键值对之间应该是有一个关系的,要么为什么你可以通过键来获取它的值,通过值来获取键呢?实际上那个关系就相当于映射,你想想,你高中学数学函数时,不是就有一一映射,我就是按照数学中的一一映射来理解的。
作者: 刘松703    时间: 2013-12-18 20:18
映射说白了就是一一相对的关系把,就是根据一个条件可以找到一个确定的值,就像初中所学的函数,map里面有一个键值对,一个是标志,一个是数据,可根据得到标志来得到相应的数据
作者: 张天昊76    时间: 2013-12-18 20:56
就是意义对应的关系,通过一个值可以得到另一个的值。
对于那个小练习,我做了一个差不多的,就是结果打印的显示方式不同。
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.util.HashMap;
  6. import java.util.Iterator;
  7. import java.util.Set;

  8. /*
  9. * 要求:接收任意一串输入,统计每个字符出现的次数。count统计  rate频率
  10. * 分析:实际上要我们统计的是两个量,一个是哪个字符出现过,还有就是它出现了几次,
  11. *                  而且这两个量是对应存在的,可以用map集合来解决此问题。字符做键,出现次数做值。
  12. * 步骤:
  13. * 1,接收控制台输入,遍历获取字符串单个字符   char charAt(int x)
  14. * 2,创建HashMap的实例,在对字符串遍历中按条件将字符作为键存入集合中
  15. *                 (1)判断单个字符是否在集合的键中存在,如果存在,将键值对应值+1   boolean containsKey(Object key)  
  16. *                 (2)如果不存在,将字符直接存入集合   
  17. */
  18. public class CountRate {
  19.         public static void main(String[] args) {
  20.                 System.out.println("请输入:");
  21.                 try {
  22.                         show(getRate(getIn()));
  23.                 } catch (IOException e) {
  24.                         e.printStackTrace();
  25.                 }

  26.         }

  27.         // 定义一个功能,获取控制台输入
  28.         static String getIn() throws IOException {
  29.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  30.                 return br.readLine();
  31.         }

  32.         // 此功能统计字符串中单个字符和出现的次数
  33.         static HashMap<Character, Integer> getRate(String str) {
  34.                 // 创建一个HashMap集合
  35.                 HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
  36.                 for (int i = 0; i < str.length(); i++) {
  37.                         char ch = str.charAt(i);
  38.                         // Integer num = hm.get(ch);
  39.                         // hm.put(ch, num == null ? 1 : num + 1);
  40.                         // 判断单个字符是否在集合的键中存在
  41.                         if (!hm.containsKey(ch)) {
  42.                                 // 集合中的键上没有此字符
  43.                                 hm.put(ch, 1);
  44.                         } else {
  45.                                 // 如果存在,在次存入,将键对应的值+1
  46.                                 hm.put(ch, hm.get(ch) + 1);
  47.                         }
  48.                 }
  49.                 return hm;
  50.         }

  51.         // 用来显示出现过的字符和出现次数
  52.         static void show(HashMap<Character, Integer> hm) {
  53.                 // 取元素keySet()
  54.                 Set<Character> set = hm.keySet();
  55.                 System.out.println("统计结果如下:");
  56.                 // 遍历set集合,取出原来集合中的键
  57.                 for (Iterator<Character> it = set.iterator(); it.hasNext();) {
  58.                         char ch = it.next();
  59.                         int rate = hm.get(ch);
  60.                         System.out.println(ch + "出现了" + rate + "次。");
  61.                 }

  62.         }
  63. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2