배열 탐색 알고리즘 (search)
- equls()를 통해 찾고있는게 배열에 존재하는지 확인
-> 찾았다면 index 반환
String[] foods = {"족발", "파스타", "치킨", "삼겹살"};
String target = "치킨";
int index = -1;
for (int i = 0; i < foods.length; i++) {
if (target.equals(foods[i])) {
index = i;
break;
}
}
System.out.println("index = " + index);
배열 중간에 삽입 (insert)
- 사이즈가 1개 더 큰 배열을 생성
- 기존 데이터 복사
- 삽입 위치를 기준으로 뒤의 데이터들을 뒤로 1칸씩 이동
-> 이동 순서는 맨 끝에서부터!
- 새로운 데이터를 타겟 인덱스자리에 복사
- 주소값 이전
int[] arr = {10, 50, 90, 100, 150};
int newNumber = 66;
int targetIndex = 2;
int[] temp= new int[arr.length + 1];
for (int i = 0; i < arr.length; i++) {
temp[i] = arr[i];
}
for (int i = arr.length; i > targetIndex; i--) {
temp[i] = temp[i-1];
}
temp[targetIndex] = newNumber;
arr = temp;
temp = null;
System.out.println("arr = " + Arrays.toString(arr));
System.out.println("temp = " + Arrays.toString(temp));
11. 2차원 배열
- Heap: 1차원 배열을 담음
- stack: 1차원 배열을 가리킬 수 있는 주소값을 가진 2차원 배열을 담음
-> 즉, stack에서 1차원배열의 주소값을 가지고 있기 때문에 1차원배열들 각각을 들여다 볼 수 있음
int[][] classScores = {scoresKim, scoresPark, scoresHong};
System.out.println(Arrays.toString(classScores[1]));
System.out.println(Arrays.toString(classScores));
System.out.println(Arrays.deepToString(classScores));
- 1차원 배열은
Arrays.toString()
을 통해 배열을 들여다 볼 때 사용
- 2차원 배열은
Arrays.deepToString()
을 통해 배열을 들여다 볼 때 사용
2차원 배열 순회
- for문을 통해 가능
- 향상된 for문을 통해서도 가능
-> js에서 for ~ of문이라고 불렸지만 java에서는 enhanced for loop, iteration, foreach 등으로 불림
for (int i = 0; i < classScores.length; i++) {
for (int j = 0; j < classScores[i].length; j++) {
System.out.printf("%d ", classScores[i][j]);
}
System.out.println();
}
System.out.println("===================");
for(int[] scores : classScores) {
for (int n : scores) {
System.out.printf("%d ", n);
}
System.out.println();
}
12. 메서드
- 메서드는 반복되는 코드를 줄여주고, 좀 더 구조화(모듈화) 시켜서 코드의 가독성을 좋게만듦
- 객체지향 프로그래밍에서 메서드는
‘객체가 가져야할 기능
이라고도 함
[리턴타입] [메서드명](매개변수) {
}
- 리턴타입을 맞춰서 적어주는 것이 중요
- 반환할 값이 없는 경우에는
void
를 사용
-> void를 사용할 경우 함수의 결과를 변수에 담을 수 없고 반드시 단독호출해서 사용!!!
- 클래스 블록에 선언 (main 안에서 X, main도 메서드)
- 메서드의 호출은 메서드 내부에서 진행
spread문법 사용
- 파라미터에 배열이 들어갈 때
int[] numbers
라고 쓰는게 정석
-> spread를 사용하여 int... numbers
라고 쓸 수 있음
static int addAll(int... numbers) {
int total = 0;
for (int n : numbers) {
total += n;
}
return total;
}