【问题标题】:Default Values in a HashmapHashmap 中的默认值
【发布时间】:2014-12-23 02:08:50
【问题描述】:

我有一个我无法解决的问题。我想解决 Alphametics(例如 SEND + MORE = MONEY --> O=0,M=1,Y=2,E=5,N=6,D=7,R=8,S=9)所以我尝试了用这样的公式得出一个方程: 1000*S+100*E+10*N+D + 1000*M+100*O+10*R+E = 10000*M+1000*O+100*N+ 10*E+Y 所以我尝试使用 Hashmap 来收集这些数据(这仅适用于等式的左侧):

Scanner s = new Scanner(System.in);
        int HowMuchWords = s.nextInt();
        String[] Words = new String[HowMuchWords];
        for(int i = 0; i<Words.length;i++){
            Words[i] = s.next().toUpperCase();
        }
        HashMap<Character,Integer> Letters = new HashMap<Character, Integer>();

        for(int i = 0;i<Words.length;i++) {
            char[] LettersWord = Words[i].toCharArray();
            for (int j = 0; j < LettersWord.length; j++) {
                Letters.put(LettersWord[j],Letters.get(LettersWord[j])+(int) Math.pow(10, LettersWord.length - 1 - j));
       }

但是我在使用 Letters.get 命令时遇到了问题。因为我想给null加一个数字,所以Value仍然是null。所以我想将Hashmap中每个值的默认值设置为0。有没有可能这样做?

【问题讨论】:

标签: java hashmap default-value


【解决方案1】:

目前最简单的方法是写

Integer r = Letters.get(...);
if (r==null)
    r=0;

而不是乱七八糟地安排地图返回默认值。

或者

int r = Letters.contains(...) ? Letters.get(...) : 0;

也会这样做。

【讨论】:

    【解决方案2】:

    您可以在创建 HashMap 时覆盖 get(Object key)。在您的代码中创建Letters 期间尝试此操作,希望对您有所帮助。

     HashMap<Character,Integer> Letters = new HashMap<Character, Integer>(){
                    @Override
                    public Integer get(Object key) {
                        if(containsKey(key)){
                           return super.get(key);                          
                        }
                        return 0;
                    }
                };
    

    【讨论】:

      【解决方案3】:

      您可以使用数组代替 Map。如果您只使用 ASCII,则字符范围映射到索引范围。如果您的情况很重要,则此代码也可以更快地运行。

      int[] Letters = new int['Z' - 'A' + 1];
      
      ...
      
      // Inside the for loop
      Letters[LettersWord[j] - 'A'] += (int) Math.pow(10, LettersWord.length - 1 - j);
      

      【讨论】:

        猜你喜欢
        • 2013-06-17
        • 1970-01-01
        • 2012-01-07
        • 2011-04-08
        • 2016-10-24
        • 2010-09-21
        • 2012-12-22
        • 2011-11-23
        相关资源
        最近更新 更多