美文网首页程序员
HashMap经典储存 分拣思路

HashMap经典储存 分拣思路

作者: VikingOldYoung | 来源:发表于2016-10-30 11:17 被阅读0次
    • this is a cat and that is a mice and where is the food?
    • 统计每个单词出现的次数
    • 存储到map中,因为map里每个key只能出现一次
    • String=key;
    • value为自定义类型
    • “分”拣思路
    • 1.为所有key创建容器
    • 第二次才把对应的value存放进去
    • 2.第一次创建容器,并且把value存放进去
    • 第二次之后,直接使用容器,存放value

    自定义类

    public class Letter {
        private String name;
        private int count;
        
        public Letter(String name, int count) {
            super();
            this.name = name;
            this.count = count;
        }
    
        public Letter() {
            
        }
    get set 方法就省略了,这个里面,只用到了count来存放字符出现的次数
    
    • 这个类里面一开始我用Integer来定义count,然后空构造器会自动把Integer赋值为null;此时我下面程序里面的count+1就会出错,因为count+1的过程,自己先得拆分,调用的是count.intValue();但是count为null此时调用方法会提示空指针错误了!!
    • 而int则会默认赋值为0,如果要用Integer的话,在空构造器里头就得给他赋值为0啦。

    思路一

    public static void main(String[] args) {
            //放到字符串里面
            String string=new String("this is a cat and that is a mice and where is the food");
            //以空格区分,将string分开
            String[] strs=string.split(" ");
            
            //存储到map中
            Map<String, Letter> letters=new HashMap<String, Letter>();
            
            for(String temp:strs){
                //为每一个key创建一个容器,似乎把Letter当做存放的容器了
                if(!letters.containsKey(temp)){
                    letters.put(temp, new Letter());
                }
            }
            for(String temp:strs){
                Letter col=letters.get(temp);//获取上面创建的容器,因为key是字符串,所以,每个字符串对应一个容器
                col.setCount(col.getCount()+1);//如果碰见一次一样的就加一
            }
            
            //输出map的值
            Set<String> keys=letters.keySet();
            for(String temp:keys){
                Letter col=letters.get(temp);
                Integer i=col.getCount();
                System.out.println("单词"+temp+"出现次数:"+i);
            }
        }
    }
    

    思路二

            Letter col=null;    //简化程序
            for(String temp:strs){
                //为每一个key创建一个容器,然后把value放进去
                if(null==(col=letters.get(temp))){//没有就建
                    //Letter col=new Letter();
                    col=new Letter();
                    col.setCount(1);        //放进去,即数目加1
                    letters.put(temp,col);
                }else{
                    col.setCount(col.getCount()+1);     //放进去,即数目加1
                }
    

    相关文章

      网友评论

        本文标题:HashMap经典储存 分拣思路

        本文链接:https://www.haomeiwen.com/subject/dgtuuttx.html