Java 运营商>;未为参数类型对象int定义

Java 运营商>;未为参数类型对象int定义,java,collections,linkedhashmap,Java,Collections,Linkedhashmap,我正在编写一个代码,用以下代码查找字符串中的第一个重复字符 package collectionsExample; import java.util.*; class LinkedHashMap1 { public static void main(String args[]) { String word = "Hare Krishna"; char[] characters = word.toCharArray(); // buil

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

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());
            }
        }
    }
}
包集合示例;
导入java.util.*;
类LinkedHashMap1
{
公共静态void main(字符串参数[]){
String word=“Hare Krishna”;
char[]characters=word.toCharArray();
//使用字符和它们在字符串中出现的次数构建HashMap
LinkedHashMap charMap=新LinkedHashMap();
for(字符ch:characters){
if(charMap.containsKey(ch)){
charMap.put(ch,charMap.get(ch)+1);
}否则{
charMap.put(ch,1);
}
}
System.out.println(charMap);
对于(Map.Entry p:charMap.entrySet()){
如果(p.getValue()>1){
System.out.println(p.getKey());
}
}
}
}
但是当我执行p.getValue()>1时,我得到了一个错误。 错误是参数类型对象int的运算符>未定义 如果p.getValue()返回int,则大于和小于运算符应起作用

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

for(Map.Entry p:charMap.entrySet())
使用原始
Map.Entry
时,编译器不知道条目的值是
Integer
s.

更改

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

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

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

您需要参数化
Map.Entry

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

…否则,它将被解释为原始的
Map.Entry
,它相当于
Map.Entry
,因此出现问题。

您需要参数化您的
Map.Entry

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

…否则它将被解释为原始的
Map.Entry
,它相当于
Map.Entry
,因此问题就出现了。

如果您使用普通的
Map.Entry
,那么就编译器而言,键和值字段是基本类型的
对象
。如果您使用
Map.Entry
,那么键和值将l分别是
字符
整数

如果使用普通的
映射.条目
,那么就编译器而言,键和值字段是基本类型
对象
。如果使用
映射.条目
,则键和值分别是
字符
整数
直观地说。

错误消息非常清楚:p.getValue()返回一个
对象,显然无法直接与int进行比较。应该指出的是,所有继承集合的对象,至少在我的经验中,如果未指定,都会将T或E默认为Object。错误消息非常清楚:p.getValue()返回一个
对象
,该对象显然不能直接与int进行比较。应该指出的是,所有继承集合的对象,至少在我的经验中,如果未指定,则默认为Object的T或E。@Pravinkotawar不客气!@Pravinkotawar不客气!