列表中的Java重复元素

rickygrimes

我有以下程序在列表中查找重复的元素。它仅适用于列表中的少数元素。在过去的30分钟里,我伤脑筋,但我无法弄清我的错误:(请一些专家的建议!

public class CheckDuplicateInList {
public static void main(String[] args) {
    List<Integer> lst = Arrays.asList(1,2,1,4,1,2,3,4);
    checkDuplicateInList(lst);      
}

public static boolean checkDuplicateInList(List<Integer> intList) { 
    Map<Integer,Integer> ctMap = new HashMap<Integer,Integer>();
    for(int i=0;i<intList.size();i++) {
        for(int j=i+1;j<intList.size();j++) {
            if(intList.get(i) == intList.get(j)) {
                if(ctMap.containsKey(intList.get(i))) {
                        ctMap.put(intList.get(i),ctMap.get(intList.get(i))+1);  
                        break;
                }
                    else {
                        ctMap.put(intList.get(i),1);                            
                    }
                }
            }
        }
        System.out.println("Duplicate elements in the List: ");
        for(Map.Entry<Integer, Integer> ctMapVals:ctMap.entrySet()) {
            System.out.println(ctMapVals.getKey()+ " occurs " +ctMapVals.getValue()+ " times");
        }



    return false;
    }
}

这是程序输出-

Duplicate elements in the List: 
1 occurs 3 times
2 occurs 1 times
4 occurs 1 times

为什么它没有给出2和4的正确结果?请指教

造雨者

您有很多额外的代码,而这些代码完全不是必需的。删除内部for循环和if比较列表ithjth元素语句

containsKey()方法足以检查。中是否已存在该数字Mapif(intList.get(i) == intList.get(j)) {只是一个过分的杀伤力,这会使您的逻辑陷入困境。

for (int i = 0; i < intList.size(); i++) {
    if (ctMap.containsKey(intList.get(i))) {
        ctMap.put(intList.get(i), ctMap.get(intList.get(i)) + 1);
    } else {
        ctMap.put(intList.get(i), 1);
    }
}

使用以上代码段时的输出:

Duplicate elements in the List: 
1 occurs 3 times
2 occurs 2 times
3 occurs 1 times
4 occurs 2 times

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章