Java将字符添加到Map中,具体取决于它们是否已存在

时间:2017-05-29 19:02:53

标签: java syntax

我正在为学校做一项任务,这要求我编写一个算法,该算法放置一个键(在这种情况下为字符类型)和一个已递增1的值,然后放回到地图中,作为递增的值。 但是,如果当前字符不存在,我应该放置键值对'current_character,1'。此方法只是向地图添加一个新条目,并且不会增加该值(假设它是同类中的第一个)。 这是代码:

 private void calculateCharCountAlpha(){
    for(String current : lines){
        for(int i = 0, length = current.length(); i < length; i++){ // iterate through each character of each string
            char currentKey = current.charAt(i);

            if(! (charCountAlpha.containsKey( currentKey )) ){ // check if the map doesn't contain the current character at the current location in the current string
                charCountAlpha.put( currentKey, 1 ); // place the current character into the map, with a value of 1
            } // end of if
            else{
                int val = charCountAlpha.get( currentKey );
                val++; // add 1 to val
                charCountAlpha.put( currentKey, val ); // place the current character in the map, with a value that has been added to 1
            } // end of else
        } // end of for
    } // end of for-each

    /** Call calculateCharCountDescendingByCount */
    calculateCharCountDescendingByCount();

} // end of calculateCharCountAlpha()

这是charCountAlpha:

 private TreeMap< Character, Integer > charCountAlpha = new TreeMap<>(); // this map stores the number of words, with their counts. Also stores the elements in order of key

老实说,我最大的问题是,“这是否正确地将元素添加到地图中?”。我已经调试了一点,并且无法看到为什么我的输出如此奇怪的问题。我可以附加我的输出,但是我还需要包含更多的代码来理解它发生了什么,所以我想(因为这是我的主要问题),我只想包含这个代码。

1 个答案:

答案 0 :(得分:3)

是的,它可以正常工作,但你可以简化:

int val = charCountAlpha.get( currentKey );
val++; // add 1 to val
charCountAlpha.put( currentKey, val );

使用:

charCountAlpha.put( currentKey, charCountAlpha.get(currentKey)+1);

此外,如果您有一个已知的密钥集(例如英文字母),则可能不需要使用TreeMap,您可以使用HashMap来获得更好的时间复杂度。