<运营商>未定义参数类型Object,int

时间:2015-02-03 14:00:34

标签: java collections linkedhashmap

我正在编写一个代码,用以下代码

查找字符串中的第一个重复字符
package collectionsExample;

import java.util.*;

class LinkedHashMap1
{
    public static void main(String args[]) {
        String word = "Hare Krishna";
        char[] characters = word.toCharArray();

        // build HashMap with character and number of times they appear in String
        LinkedHashMap<Character, Integer> charMap = new LinkedHashMap<Character, Integer>();
        for (Character ch : characters) {
            if (charMap.containsKey(ch)) {
                charMap.put(ch, charMap.get(ch) + 1);
            } else {
                charMap.put(ch, 1);
            }
        }

        System.out.println(charMap);
        for(Map.Entry p : charMap.entrySet()){
            if(p.getValue() > 1){
                System.out.println(p.getKey());
            }
        }
    }
}

但是当我做p.getValue()&gt;时我收到错误1。 错误是运算符&gt;未定义参数类型Object,int 如果p.getValue()返回int,那么大于和小于运算符应该工作

3 个答案:

答案 0 :(得分:3)

更改

for(Map.Entry p : charMap.entrySet())

for(Map.Entry<Character,Integer> p : charMap.entrySet())

当您使用原始Map.Entry时,编译器不知道您的条目的值是Integer s。

答案 1 :(得分:3)

您需要参数化Map.Entry

for(Map.Entry<Character, Integer> p : charMap.entrySet()){

...否则它被解释为原始Map.Entry,相当于Map.Entry<Object, Object>,因此问题。

答案 2 :(得分:2)

如果使用plain Map.Entry,那么就编译器而言,键和值字段属于基类型Object。如果您使用Map.Entry<Character, Integer>,那么键和值将分别为CharacterInteger