java를 자바- 배열 원소 삽입 및 원소 삭제(java array insert or remove element)

안녕하세요! jay입니다.
"java를 자바" 첫 시간입니다
하하하 재밌죠?
제가 재학중인 대학교에서는
프로그래밍 언어로 java를 쓰는 수업이 많습니다.
그래서 블로그에 학교에서 배운 내용을 바탕으로
제가 깨달은 것들을 차근차근 정리해보도록 하겠습니다.
이번 시간은 java에서 배열 원소를 삽입 혹은 삭제 하는 법을 다루어 보겠습니다.



1. 배열 원소 삽입

현재 저희가 짜고자 하는 배열 원소 삽입 프로그램의 조건입니다.
 1. 배열의 길이가 5인 배열이 있다.
2. 이 배열은 인덱스 0부터 4까지 1,2,3,4,5의 숫자가 담겨있다.
3. 인덱스가 1번인 배열에 숫자 100을 넣을 것이다.
4. 이때 배열값이 이동할 때마다 count를 센다.
그림으로 간단히 설명하면
 위의 배열이 아래와 같이 바뀌는 것입니다.

이제 여기서 중요한 개념이 배열 이동 개념입니다.
결론부터 말씀드리면
배열 특정 원소를 삽입할 때
배열 마지막 인덱스부터 이동해야됩니다.
만약 제가 인덱스 1번 값인 2를 인덱스 2로 옮긴다면
원래 인덱스 2번에 있던 3은 사라지기 때문입니다.
이제 예시 코드를 봅시다.

public static void main(String[] args) {
 
  int list_size = 5; // 배열 사이즈
  int[] list = new int[list_size]; // 배열의 크기가 5인 배열을 생성
  int count = 0; // 배열 원소가 이동할 때 마다 count
 
  for(int j = 0; j < 5; j++) { 
     list[j] = j+1; // 인덱스가 i일 때 배열 값은 i+1을 넣는다.
  }
 
  for(int i = list.length-1; i >= 1; i--) { // 배열의 마지막 인덱스부터 우리가 바꾸고 싶은 인덱스까지 반복문을 돌린다.
     list[i] = list[i-1];  // 인덱스i-1의 값을 인덱스 i로 이동
  
  if(i == 1) {  // 만약 i가 우리가 바꾸고싶은 인덱스의 값과 일치한다면
     list[1] = 100; // 해당 인덱스에 우리가 원하는 값을 넣는다.
     break; // for문을 탈출한다. 이래야 counting이 되지 않는다.
  }
     count++;  // 이동할 때마다 count 증가
  }
  System.out.println(count); // counting을 확인한다.
  System.out.println(list[1]); // 우리가 원하는 배열 값을 확인한다.
}

위의 코드처럼 for문을 우리가 삽입하려는 배열의 인덱스까지 돌려도 된다.
하지만  더 간단히 짜보면
우리가 바꾸려는 배열의 인덱스 전까지만 반복문을 돌리고
그 후에 값을 넣어도 상관이 없다.
아래 코드를 참조하세요!


public static void main(String[] args) {
 
 int list_size = 5; // 배열 사이즈
 int[] list = new int[list_size]; // 배열의 크기가 5인 배열을 생성
 int count = 0; // 배열 원소가 이동할 때 마다 count
 
 for(int j = 0; j < 5; j++) { 
  list[j] = j+1; // 인덱스가 i일 때 배열 값은 i+1을 넣는다.
 }
 
 for(int i = list.length-1; i > 1; i--) { // 배열의 마지막 인덱스부터 우리가 바꾸고 싶은 인덱스 전까지 반복문을 돌린다.
  list[i] = list[i-1];  // 인덱스i-1의 값을 인덱스 i로 이동
  count++;  // 이동할 때마다 count 증가
 }
 list[1] = 100; // 이동이 끝난 다음 원하는 값을 넣는다.
 
 System.out.println(count); // counting을 확인한다.
 System.out.println(list[1]); // 우리가 원하는 배열 값을 확인한다.
}


2. 배열 원소 삭제

이제 삽입은 끝났으니 원소를 삭제를 해보겠습니다.
원소 삽입이 이해되셨다면
삭제는 금방 이해하실 겁니다.
원소 삽입 경우 배열의 마지막 인덱스부터 
우리가 바꾸고자하는 인덱스까지 값을 이동시켰다면
이와 반대로
삭제는 우리가 삭제시키려는 배열의 인덱스 다음 인덱스부터
값을 이동시키면 됩니다.

예를 들어
만약 우리가 인덱스 1인 2를 지우고 싶다면
먼저 인덱스 2의 값을 인덱스 1로 옮기면 되고
인덱스 3의 값을 인덱스 2로 옮기면 되고
...
이 과정을 반복하면 
배열의 원소를 쉽게 삭제할 수 있습니다.
코드는 아래와 같습니다.


public static void main(String[] args) {
 
 int list_size = 5; // 배열 사이즈
 int[] list = new int[list_size]; // 배열의 크기가 5인 배열을 생성
 int count = 0; // 배열 원소가 이동할 때 마다 count
 
 for(int j = 0; j < 5; j++) { 
  list[j] = j+1; // 인덱스가 i일 때 배열 값은 i+1을 넣는다.
 }
 
 for(int i = 1; i < list.length-1; i++) { // 우리가 삭제하고 싶은 인덱스 값부터 마지막 인덱스까지 반복문을 돌린다.
  list[i] = list[i+1];  // 인덱스 i+1의 값을 인덱스 i로 이동
  count++;  // 이동할 때마다 count 증가
 }
 
 System.out.println(count); // counting을 확인한다.
 System.out.println(list[1]); // 우리가 원하는 배열 값을 확인한다.
}

1. 우리가 삭제하고 싶은 인덱스인 1부터 마지막 인덱스까지 반복문을 돌립니다.
2. 인덱스가 큰 값을 인덱스가 작은 곳으로 넣습니다(이때 삭제가 됩니다)
3. 그 횟수만큼 count합니다.

댓글

댓글 쓰기