hashmap中的每隔一个字母

时间:2015-10-23 19:50:35

标签: java

HashMap<String,Integer> hm1 = new HashMap<String,Integer>
HashMap<String,Integer> hm2 = new HashMap<String,Integer>

我希望循环使用字母表,并根据数字在文本中的出现次数添加“a-z”。我有这个完全工作,但我现在正在改变这一点。我希望它通过两个哈希映射,例如'a'转到hm1,'b'转到hm2,'c'转到hm1。 'd'去了hm2。所以每一个人都会改变。我一直在尝试这样做几个小时而且很挣扎。

我试图通过访问值的索引并尝试进行模数来做到这一点,如果它是例如然后只做0-25,然后将偶数索引添加到一个散列映射,将奇数索引添加到另一个散列映射。这样我就可以得到所有其他字母。但似乎无法让这个工作,非常令人沮丧!

编辑: 例如:

  for ( char a = 'a'; a < z; a++){
    for ( int i = 0; 0<25; i++){
         h1.put(a,i);
          }
       }

如果我想要上面这样做,而不是全部在一个hashmap中,超过两个hashmap,所以一个做a,c,e,另一个做b,d,f等等...但是这些值不是那么明显0-25但可能很大。

2 个答案:

答案 0 :(得分:1)

双循环并不能完成您的想法。 对于a的每个值,你执行内部循环25次,这会使你把每个字符都作为值25.而不是内部循环,你应该有一个在char循环外初始化并在其内部递增的计数器变量。

答案 1 :(得分:1)

你可以得到密钥的第一个字母,得到它的int值(记住在java中,一个字符是一个int值),并得到它的模数2.这样的东西:

private void putValue(String key, Integer value) {
      int firstLetterInt = (int) key.charAt(0);
      if (firstLetterInt % 2 == 0) {
          hm1.put(key, value);
      }
      else {
          hm2.put(key, value);
      }
 }

...

putValue("a", 66);
putValue("b", 100);

更一般的情况是拥有地图列表:

List<Map<String, Integer>> maps;

正确初始化地图,您的putValue将如下所示:

private void putValue(String key, Integer value) {
      int firstLetterInt = (int) key.charAt(0);
      maps.get(firstLetterInt % maps.size()).put(key, value);
 }