2012-10-18 5 views
0

많은 arraylists를 생성하는 응용 프로그램이 컬렉션에 저장되어 있습니다. 모든 arraylists는 항상 공통 요소를 갖습니다.Java 많은 arraylists - 공통 요소 찾기

공통 요소는 무엇인지 알아야합니다. 나는 이것을 두 개의 목록으로 관리하고 List.contains(...)을 사용했지만 이것을 많은 목록으로 확장 할 필요가있다.

어떻게하면됩니까?

답변

1

사용 (이 같은의 요소 여러 번이가에있다 ArrayList를, 즉 경우에도 주파수에 각 ArrayList의 독특한 요소를 매핑하는 해시 테이블 ... 더 증분이된다 단 한 번만). 값이 arraylists의 수와 같을 때까지 해시 테이블을 반복합니다. 해당 키는 우리가 찾고있는 요소입니다.

+0

이런 식으로 해결 한 것 같습니다. 고마워요. – user1277546

0

사용 retainAll() 때문에 각 단계에서 당신은 목록

list1.retainAll(list2); 
list1.retainAll(list3); 

list1이 모든 요소의 교차 될 것입니다 그래서이 방법의 교차점이있을 것이다. 이제 공통 요소가 복제 될 경우 최종 목록을 설정 및 완료해야합니다.

2

retainAll() 모두 List에서 Set으로 설정하면 세트의 모든 공통 요소가 종료됩니다.

Set set = new HashSet(); 
for (List list : yourLists) 
{ 
    set.addAll(list); 
} 
for (List list : yourLists) 
{ 
    set.retainAll(list); 
} 

거의 하찮게 한 번만 목록을 통과 (그리고 기존의 모든 목록 플러스 목록의 추가 크기의 크기와 동일한 힙 공간까지 사용),하지만 대한을 최적화 할 수 있습니다 것이며 설명 목적으로이 버전은

건배,

+0

이 옵션을 보았습니다.하지만 집합에 순서가 지정되지 않았으므로 최소한의 공통 요소를 어떻게 결정합니까 (즉, 모든 목록에서 가장 낮은 것으로 나타남)? – user1277546

+0

정의에 따르면 집합의 모든 요소는 모든 목록에서 동일한 횟수 (즉, 목록 개수)가됩니다. 요소 중 하나라도 다른 목록보다 적은 목록에서 발생하면 최종 집합에 포함되지 않습니다. 그렇습니까? –