运算符 > 未定义参数类型 Object, int

The operator > is undefined for the argument type(s) Object, int

我正在编写代码以使用以下代码查找字符串中的第一个重复字符

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() > 1 时出现错误。 错误是 The operator > is undefined for the argument type(s) Object, int 如果 p.getValue() returns int 那么大于和小于运算符应该工作

改变

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

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

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

您需要参数化您的 Map.Entry:

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

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

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