HashMap經(jīng)典儲存 分揀思路

  • this is a cat and that is a mice and where is the food?
  • 統(tǒng)計每個單詞出現(xiàn)的次數(shù)
  • 存儲到map中,因為map里每個key只能出現(xiàn)一次
  • String=key;
  • value為自定義類型
  • “分”揀思路
  • 1.為所有key創(chuàng)建容器
  • 第二次才把對應(yīng)的value存放進去
  • 2.第一次創(chuàng)建容器,并且把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來存放字符出現(xiàn)的次數(shù)
  • 這個類里面一開始我用Integer來定義count,然后空構(gòu)造器會自動把Integer賦值為null;此時我下面程序里面的count+1就會出錯,因為count+1的過程,自己先得拆分,調(diào)用的是count.intValue();但是count為null此時調(diào)用方法會提示空指針錯誤了!!
  • 而int則會默認賦值為0,如果要用Integer的話,在空構(gòu)造器里頭就得給他賦值為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");
        //以空格區(qū)分,將string分開
        String[] strs=string.split(" ");
        
        //存儲到map中
        Map<String, Letter> letters=new HashMap<String, Letter>();
        
        for(String temp:strs){
            //為每一個key創(chuàng)建一個容器,似乎把Letter當做存放的容器了
            if(!letters.containsKey(temp)){
                letters.put(temp, new Letter());
            }
        }
        for(String temp:strs){
            Letter col=letters.get(temp);//獲取上面創(chuàng)建的容器,因為key是字符串,所以,每個字符串對應(yīng)一個容器
            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+"出現(xiàn)次數(shù):"+i);
        }
    }
}

思路二

        Letter col=null;    //簡化程序
        for(String temp:strs){
            //為每一個key創(chuàng)建一個容器,然后把value放進去
            if(null==(col=letters.get(temp))){//沒有就建
                //Letter col=new Letter();
                col=new Letter();
                col.setCount(1);        //放進去,即數(shù)目加1
                letters.put(temp,col);
            }else{
                col.setCount(col.getCount()+1);     //放進去,即數(shù)目加1
            }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,767評論 18 399
  • //Clojure入門教程: Clojure – Functional Programming for the J...
    葡萄喃喃囈語閱讀 3,777評論 0 7
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,776評論 0 33
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 長師是什么? 一輛銹跡斑斑的超跑 可能幾十年的的歷史給他了老舊的外表 而那顆幾百匹的大心臟卻從來沒有停過 超跑沒有...
    看風動閱讀 266評論 0 0