Java在列表中复制元素

Java在列表中复制元素,java,Java,我有下面的程序来查找列表中的重复元素。它仅适用于列表中的少数元素。在过去的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); }

我有下面的程序来查找列表中的重复元素。它仅适用于列表中的少数元素。在过去的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;
    }
}
为什么它不能给出2和4的正确结果?请建议您试试这个

    public static boolean checkDuplicateInList(List<Integer> intList) {
        Map<Integer, Integer> ctMap = new HashMap<Integer, Integer>();
        for (int e : intList) {
            if (ctMap.containsKey(e)) {
                ctMap.put(e, ctMap.get(e) + 1);
            } else {
                ctMap.put(e, 1);
            }
        }
...
publicstaticboolearncheckduplicateinlist(List intList){
Map ctMap=newhashmap();
for(int e:int列表){
if(ctMap.containsKey(e)){
ctMap.put(e,ctMap.get(e)+1);
}否则{
ctMap.put(e,1);
}
}
...

您有许多完全不需要的额外代码。请删除内部
for
循环和
if
语句,该语句比较列表中的
第i个
第j个
元素

containsKey()
方法足以检查该数字是否已存在于
映射中
if(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);
    }
}

您的for循环逻辑错误。它将每个匹配的值1放入映射中(它忘记了即使没有匹配,也至少有一个元素)…因此for循环的正确代码为:

 for(int i=0;i<intList.size();i++) {
        if(!ctMap.containsKey(intList.get(i))) {
             ctMap.put(intList.get(i),1);  
        }
        for(int j=i+1;j<intList.size();j++) {
            int  iKey = intList.get(i);
            int jKey = intList.get(j);
            if(iKey == jKey) {
                        ctMap.put(intList.get(i),ctMap.get(intList.get(i))+1);  
                        //break;


                }
            }
        }

for(int i=0;i为什么要这样做:int j=i+1;?某种程度上限制了您比较的元素的数量它的enouth只有一个循环,并在增加映射中的所有计数器后遍历列表。您是从
if
语句中的内部循环中进行
break
ing。进行第二个循环(使用j)同样,从0开始,在else块的末尾添加一个break语句。或者将它从if块内移动到else块后。为什么你们投票失败?我的代码并没有完全错误,我的问题也不是毫无意义的:(加油,伙计们)。
Duplicate elements in the List: 
1 occurs 3 times
2 occurs 2 times
3 occurs 1 times
4 occurs 2 times
 for(int i=0;i<intList.size();i++) {
        if(!ctMap.containsKey(intList.get(i))) {
             ctMap.put(intList.get(i),1);  
        }
        for(int j=i+1;j<intList.size();j++) {
            int  iKey = intList.get(i);
            int jKey = intList.get(j);
            if(iKey == jKey) {
                        ctMap.put(intList.get(i),ctMap.get(intList.get(i))+1);  
                        //break;


                }
            }
        }