2012-11-15 5 views
0

가능한 중복 :
Check whether an array is a subset of another배열 a가 java의 배열 b의 일부인지 확인하는 방법은 무엇입니까?

나는 배열 a = { 1,4,3,5,1,2,3,6 } 및 배열 b= { 1,2,3 } 있습니다.

배열요소가 배열 a의 어느 위치에 나타나는지 어떻게 확인할 수 있습니까? 어떤 도움을 주시면 감사하겠습니다. 감사.

+3

그것은 O '에서 사소한 (N^2)'. 'O (n log n)'도 비교적 쉽습니다. 너 뭐 해봤 니? –

+1

그냥 참고로, 여기에 대답 http://stackoverflow.com/questions/1128723/in-java-how-can-i-test-if-an-array-contains-a-certain-value –

+0

해야 요소들은 함께 배치되거나 b의 각 요소는? –

답변

2

사용 Apache Commons Lang :

for (Object element:b) { 
    if (ArrayUtils.contains(a,element) == false) return false; 
} 
return true; 
5

가장 쉬운 방법은 분명히 내장 기능을 사용하는 것입니다. 그러나 Java에는 Collection 유형에 대해이 작업을 수행하는 기본 제공 함수 만 있습니다. 배열이 기본 유형이 아닌 경우,이 작업을 수행 할 수 있습니다

if (Arrays.asList(a).containsAll(Arrays.asList(b))) { 
    //... 
} 

을가 원시적 배열 (int[] 등)이 여전히 가장 쉬운 방법입니다 있다면, 당신은 단지 수동으로 목록으로 배열을 변환해야하거나 타사 라이브러리를 사용합니다. 이것에 대한 Guava has functions :

if (Ints.asList(a).containsAll(Ints.asList(b))) { 
    //... 
} 
+0

감사합니다. 배열을 목록으로 변환했지만 여전히 Ints.asList를 인식 할 수 없으며 이것이 코드입니다. \t \t // 배열을 목록으로 변환하십시오. \t \t 목록 alist = (목록) Arrays.asList (a); \t \t 목록 blist = (목록) Arrays.asList (b); \t \t \t \t 경우 (Ints.asList (blist) .containsAll (Ints.asList의 (a))) { \t \t \t System.out.print ("예"); \t \t} else \t \t System.out.print ("no"); – user1172575

+0

@ user1172575 의견에서 b의 요소는 함께 있어야한다고했지만, 그렇지 않은 경우에도 true를 반환합니다. – madth3

+0

@ madth3, b에 fount가 아니면 false를 반환해야합니다. 그렇지 않은 경우에도 true를 반환하는 이유는 무엇입니까? – user1172575

관련 문제