이번 포스팅에서 배열에서 특정 값을 찾는 여러 방법을 알아보자 !
가장 기본적인 문법인 반복문을 사용하여 배열에 특정 값이 존재하는지 확인할 수 있다.
여기선 for
문을 사용해 배열의 요소에 접근하고, equals()
메소드를 사용해 특정 값을 비교하는 식으로 찾아보자
String[] strArr = {"AB", "BC", "BCD", "CD", "CDEF"};
String target = "AB";
for (String str : strArr){
if(str.equals(target)){
System.out.println(target + "는 strArr에 존재합니다.");
}
}
AB는 strArr에 존재합니다.
배열을 List로 변환 후 List 클래스에서 제공하는 메소드들을 사용해 특정 값이 존재하는지, 어느 위치에 있는지 찾을 수 있다.
contains()
: 특정 값이 List에 포함되어 있으면 true
를 반환하고, 그렇지 않다면 false
를 반환한다.containsAll(targetList tl)
: 전달받은 targetList의 값 중 하나라도 List에 포함되어 있으면 true
를 반환하고, 그렇지 않다면 false
를 반환한다.indexOf()
: 특정 값이 List에 포함되어 있으면 가장 첫 번째 값의 index
를 반환하고, 그렇지 않다면 -1
를 반환한다.import java.util.*;
// strArr[1], strArr[3]에 "BC"
String[] strArr = {"AB", "BC", "BCD", "BC", "CDEF"};
String target = "BC";
List<String> targetList = Arrays.asList("AB", "BC");
List<String> strList = new ArrayList<>(Arrays.asList(strArr));
// "BC"가 strList에 포함되어 있는지 - contains()
if(strList.contains(target)){
System.out.println(target + "는 strList에 존재합니다.");
}
// "AB"나 "BC"가 strList에 하나라도 포함되어 있는지 - containsAll()
if(strList.containsAll(targetList)){
System.out.println(target + "는 strList에 존재합니다.");
}
// "BC"가 strList에 포함되어 있는지 - indexOf()
if(strList.indexOf(target) != -1){
// "BC"의 첫 번째 인덱스를 포함해 출력
System.out.println(target + "는 strList에 존재하며, " + target + "의 첫 번째 인덱스는 " + Integer.toString(strList.indexOf(target)) + "입니다.");
}
BC는 strList에 존재합니다.
[AB, BC]는 strList에 존재합니다.
BC는 strList에 존재하며, BC의 첫 번째 인덱스는 1입니다.
Java의 버전이 1.8 이상인 경우 Stream API의 anyMatch()
메소드를 사용할 수 있다.
배열을 스트림으로 변환 후, anyMatch()
메소드를 호출한다.
anyMatch()
: 특정 값을 확인하는 람다식 또는 메소드 참조식을 전달해 특정 값이 있는지 확인해서 있다면, true
를 반환하고, 그렇지 않다면 false
를 반환한다.import java.util.*;
String[] strArr = {"AB", "BC", "BCD", "CD", "CDEF"};
String target = "BC";
boolean isExist = Arrays.stream(strArr).anyMatch(target::equals);
// "BC"가 strList에 포함되어 있는지
if(isExist){
System.out.println(target + "는 strArr에 존재합니다.");
}
BC는 strArr에 존재합니다.
Arrays 클래스의 sort()
나 parallelSort()
메소드를 사용해 배열을 정렬하고, binarySearch()
메소드를 사용해 특정 값이 있는지 확인한다.
binarySearch(배열, 특정 값)
: 전달받은 배열에서 특정 값이 있는지 확인해 있다면 특정 값의 위치(index)
를 반환하고, 그렇지 않다면 -1
을 반환한다.import java.util.*;
String[] strArr = {"AB", "BC", "BCD", "CD", "CDEF"};
String target = "BC";
System.out.println("정렬 전 " + Arrays.toString(strArr));
Arrays.sort(strArr);
System.out.println("정렬 후 " + Arrays.toString(strArr));
// "BC"가 strList에 포함되어 있다면 index, 아니라면 -1
int findIndex = Arrays.binarySearch(strArray, target);
if(findIndex != -1){
System.out.println(target + "는 strArr에 존재합니다.");
}
BC는 strArr에 존재합니다.