JAVA/java 공부

[JAVA] 배열 [ ]

congs 2023. 3. 25. 23:59

배열

: 같은 타입, 같은 의미를 가지는 변수들의 집합 (참조 변수)

  • [     ] : 인덱스 연산자 = 배열 요소가 저장된 메모리의 위치를 찾아주는 기능
  •  반복문 이용 가능, 관리가 용이, 선언 이후 배열 값 변경이 가능

 

배열 선언 

1. 배열 선언

  1. 타입[ ] 배열이름;
  2. 타입 배열이름[ ];

2. 배열 선언 및 초기화 (바로 생성)

  1. 타입[ ] 배열이름 = new 타입 [ 길이 ] ;
  2. 타입 배열 이름[ ] = new 타입 [ 길이 ] ;
    • 가장 일반적 선언
    • [ ] 길이가 공백일 경우 = 0으로 생성
  3. 타입 [ ] 배열 이름 = new 타입 [ ] { 값, 값, 값, 값, 값} ;
  4. 타입 [ ] 배열 이름 = {값, 값, 값, 값, 값} ; 
    • 선언과 동시에 초기화가 가능한 경우 사용 (바로 사용)

 

주의 사항

  • 배열의 시작번지 :  0 
  • 배열의 마지막 번지 : 배열 길이 -1
  • 배열의 길이 : .length (0이상)
    • 배열 길이는 길이 추가/삭제 불가능!

 

⭐ 배열 길이를 늘리거나 삭제하는 방법

 

1. 배열 길이(크기) 늘리기

: new를 이용하여 새 배열 생성 -> arraycopy 을 이용해 배열 복사 -> 연결 하기

 System.arraycopy( 구배열, 시작번지, 신배열, 시작번지, 총개수 )

private Subject[] subjectList;
private int subCount;

//배열의 모든 자리를 사용한 경우,
//new을 이용해 새 배열 생성 -> arraycopy 을 이용해 배열 복사 -> 연결
		
if(subCount == subjectList.length) {
	Subject[] tmp = new Subject[subjectList.length+5]; //subCount+5도 동일효과(5만큼 늘리기)
	System.arraycopy(subjectList, 0, tmp, 0, subCount); //tmp임시배열에 옮겼다가
	subjectList = tmp; //다시 배열에 연결
}

 

2. 배열에서 원하는 값 찾아 삭제하기

 : 배열을 밀고 새로 정리하는 방법

     = 찾은 위치부터 뒷 번지의 값을 모두 한칸씩 앞으로 쭉쭉 밀어서 저장

  • 찾는 값의 번지를 찾을 index 선언
  • 배열에 있는지 값 확인 → 있는 경우, 찾는 값을 배열의 맨 뒤로 보내고 null로 선언
public void deleteSubject(String subName) {
	int index = -1; //찾는 과목의 위치를 나타내는 변수
		
	//찾을 subName을 잘못해서 안넣은 경우
	if(subName == null) {
		return;
	}
		
	//배열에 있는지 확인하는 for문
	for(int i=0; i<subCount; i++) {//subCount=값이 있는 곳까지만 확인
		if(subjectList[i].getSubName().equals(subName)) {
			index=i; //있다면 index에 과목 위치 삽입
			break;
		}	
	}
		
	//찾는 subName이 배열에 없는 경우
	if(index == -1) {
		return;
	}
	
	//찾는 subName이 배열에 있는 경우
	//찾은 위치부터 뒷 번지의 값을 앞으로 쭉쭉 밀어서 저장 
	//subCount=1 =1과목이 있다는 의미 =subjectList는 0번지
    
	for(int i=index; i<subCount-1; i++) { //subCount-1까지 하는게 중요!!
		subjectList[i] = subjectList[i+1];
	}
    
	//= 마지막 번지를 null로!
	//예) 과목이 3인 경우: 0 1 2
	subjectList[subCount-1]=null;
	subCount--;