2016-08-29 12 views
-1

Arraylist에서 중복 요소를 얻으려면 아래 코드를 썼습니다. 내 aerospikePID 목록에 중복 값이 ​​없지만 여전히 코드 아래에서 실행 중이면 조건 ​​인 경우 읽기입니다. k = 1위한 j = 1 (j 번째의 반복), (j 값 (k)의 첫 번째 반복은 1로 동일) 경우Arraylist의 요소를 비교하는 방법 <Integer>

ArrayList<Integer> aerospikePIDs = new ArrayList<Integer>();  

ArrayList<Integer> duplicates = new ArrayList<Integer>(); 
    boolean flag; 
    for(int j=0;j<aerospikePIDs.size();j++) { 
     for(int k=1;k<aerospikePIDs.size();k++) { 
      if(aerospikePIDs.get(j)==aerospikePIDs.get(k)) { 
      duplicates.add(aerospikePIDs.get(k)); 
      flag=true; 
      } 
      if(flag=true) 
System.out.println("duplicate elements for term " +searchTerm+duplicates); 
    } 
       } 

답변

2

내 내부 루프는 달리, (하지 1)에서 j + 1에서 시작한다.

aerospikePIDs.get(j)==aerospikePIDs.get(k) 

true을 반환합니다.

그래서 코드는 다음과 같아야합니다

ArrayList<Integer> aerospikePIDs = new ArrayList<Integer>();  

ArrayList<Integer> duplicates = new ArrayList<Integer>(); 

for (int j = 0; j < aerospikePIDs.size(); j++) { 
    for (int k = j + 1; k < aerospikePIDs.size(); k++) { 
     if (aerospikePIDs.get(j)==aerospikePIDs.get(k)) { 
      duplicates.add(aerospikePIDs.get(k)); 
      System.out.println("duplicate elements for term " +searchTerm+duplicates); 
     } 
    } 
} 

참고 : 중복 addeda 경우는 직접 인쇄 할 수 있기 때문에 플래그는 필요하지 않습니다 새로운 불필요한 변수와 코드를 정의하지 않고, 경우.

+0

플래그가 필요하지 않습니다. 내가 그것을 제거 대답을 업데이 트되었습니다. –

0

를 사용하여 높은 수준의 추상화하십시오 Map<Integer, Integer>

  1. 밀어 모든 목록 요소 - 키가 PID를 목록의 항목이며, 값은 카운터입니다. 해당 루프는 단순히 "현재 키? 예 - 카운터 증가, 그렇지 않으면 카운터 1로 키 추가"를 확인합니다.
  2. 결국지도를 반복 할 수 있으며 카운터가 1보다 큰 각 항목의 목록에 중복 된 항목이 있습니다. 심지어 에 대한 복제본 수는입니다.

그런 좋은 방법을 보여주는 질문/답변이 거의 매일 게시됩니다. 예를 들어 here을 시작할 수 있습니다. "String"키에서 "Integer"키에만 적응하면됩니다.

정말로 : 모음집을 사용하여 작업 할 때는 첫 번째 단계는 항상 고가 수준 일을 처리하는 방법을 찾아서 방금 전에했던 것처럼 오류가 발생하기 쉬운 저급 코드를 작성하는 것입니다.

0

동일한 arraylist를 사용하여 반복합니다. inner for 루프의 모든 데이터를 검사 중이므로 중복 된 데이터가 표시됩니다.

관련 문제