• 分拣存储01——高淇JAVA300讲笔记之分拣存储


          利用HashMap实现分拣存储,可以简单理解成往特定的袋子里装东西。举个例子,装苹果的袋子里只能往里丢苹果,装橘子的袋子里只能往里丢橘子。

          以下代码的作用是统计一段英文句子里每个单词出现的次数。

       

          解决思路:

          1.把句子分割成单词存进数组里;

          2.遍历这个数组,把单词存进HashMap里。HashMap里的key就是每个单词,value就是单词出现的次数。value的值也可以是一个对象,对象里有关于次数的属性。

          3.最后就是通过迭代器查看每个单词出现的次数。

    第1种解决办法:HashMap的value直接存单词出现次数

     1 package com.bjsxt.map;
     2 
     3 import java.util.HashMap;
     4 import java.util.Iterator;
     5 import java.util.Map;
     6 import java.util.Set;
     7 
     8 /**
     9  * 分拣存储:1:N
    10  * 统计单词出现的次数
    11  * this is a cat and that is a mice and where is the food ?
    12  * 思路
    13  * 1.分割字符串
    14  * 2.分拣存储
    15  * 3.按要求查看单词出现的次数
    16  * 
    17  *
    18  */
    19 public class MapDemo01 {
    20     public static void main(String[] args) {
    21         //1.分割字符串
    22         String[] arr = "this is a cat and that is a mice and where is the food ?".split(" ");
    23         //2.分拣存储
    24         Map<String,Integer> map = new HashMap<String,Integer>();
    25         for(String key:arr) {
    26 //            System.out.println(key );  //打印每个单词
    27             /*if(!map.containsKey(key)) {  //查看是否存在该单词
    28                 map.put(key, 1);
    29             } else {  //存在
    30                 map.put(key, map.get(key)+1);
    31             }*/
    32             Integer value = map.get(key);
    33             if(null == value) {  //不存在
    34                 map.put(key, 1);
    35             } else {
    36                 map.put(key, value+1);
    37             }
    38         }
    39         //3.查看每个单词出现的次数
    40         Set<String> keySet = map.keySet();
    41         //获取迭代器对象
    42         Iterator<String> it = keySet.iterator();
    43         while(it.hasNext()) {
    44             String key = it.next();
    45             Integer value = map.get(key);
    46             System.out.println(key+"-->"+value);
    47         }
    48     }
    49 }

    第2种解决办法:HashMap的value存一个对象

    首先,建一个Letter类,包含成员变量name和count,还有构造器,getter与setter方法。这里裴新老师还介绍了一些Eclipse的快捷键。

     1 package com.bjsxt.map;
     2 
     3 /**
     4  * javabean 存储数据 po bo vo 包含setter与getter访问器的类
     5  *
     6  */
     7 public class Letter {
     8     private String name;  //单词
     9     private int count;  //次数
    10     
    11     //alt+/  快捷键 生成空构造器
    12     public Letter() {
    13     }
    14     
    15     public Letter(String name) {
    16         super();
    17         this.name = name;
    18     }
    19     
    20     //alt+shift+s --> o  快捷键 生成带参构造器
    21     public Letter(String name, int count) {
    22         super();
    23         this.name = name;
    24         this.count = count;
    25     }
    26 
    27     //setter与getter
    28     public static void main(String[] args) {
    29         
    30     }
    31 
    32     public String getName() {
    33         return name;
    34     }
    35 
    36     public void setName(String name) {
    37         this.name = name;
    38     }
    39 
    40     public int getCount() {
    41         return count;
    42     }
    43 
    44     public void setCount(int count) {
    45         this.count = count;
    46     }
    47 }

    然后,我们进行分拣存储:

     1 package com.bjsxt.map;
     2 
     3 import java.util.HashMap;
     4 import java.util.Iterator;
     5 import java.util.Map;
     6 import java.util.Set;
     7 
     8 /**
     9  * 分拣存储:1:N
    10  * 统计单词出现的次数
    11  * this is a cat and that is a mice and where is the food ?
    12  * 思路
    13  * 1.分割字符串
    14  * 2.分拣存储
    15  * 3.按要求查看单词出现的次数
    16  * 4.加入面向对象
    17  * 
    18  *
    19  */
    20 public class MapDemo02 {
    21     public static void main(String[] args) {
    22         //1.分割字符串
    23         String[] arr = "this is a cat and that is a mice and where is the food ?".split(" ");
    24         //2.分拣存储
    25         Map<String,Letter> map = new HashMap<String,Letter>();
    26         for(String key:arr) {
    27             /*
    28             //第一次查看是否 存在袋子
    29             if(!map.containsKey(key)) {  //不存在
    30                 map.put(key, new Letter(key));  //准备好袋子
    31             }
    32             //获取袋子
    33             Letter value = map.get(key);
    34             value.setCount(value.getCount()+1);  //装东西
    35             */
    36             Letter value = map.get(key);
    37             if(null==value) {
    38                 value = new Letter(key);
    39                 map.put(key, value);
    40             }
    41             value.setCount(value.getCount()+1);  //装东西
    42         }
    43         //3.查看每个单词出现的次数
    44         for(String key:map.keySet()) {
    45             Letter value = map.get(key);
    46             System.out.println(key+"-->"+value.getCount());
    47         }
    48         
    49     }
    50 }
  • 相关阅读:
    让iis支持中文文件名(转)
    为你的mail server增加SPF记录
    sql清除事务日志命令
    收集的ASP.NET中常用正则表达式
    在线支付类封装
    提供一个操作Windows服务类库(基本函数)
    简单测试Newtonsoft.json JObject内存占用分配
    图片和文字同行 对齐方式
    常用的css(持续跟新中....)
    Effective Ways to Develop Web Part
  • 原文地址:https://www.cnblogs.com/swimminglover/p/8315608.html
Copyright © 2020-2023  润新知