美文网首页程序员
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