본문 바로가기

Basic/자료구조,알고리즘

배열과 리스트1

반응형

1. 배열이란? 

 

여러 연관된 데이터를 하나의 이름으로 그룹핑해서 관리하기 위한 data structure이다.

 

모든 언어에서 배열을 지원하고 많은 자료구조에서 배열을 부품적으로 이용하기 때문에 

 

가장 기본적인 자료구조이면서 중요하다고 할 수 있다.

 

배열을 이용하면 하나의 변수에 여러 정보를 담을 수 있다.

 

배열의 구성요소는 값, 인덱스, 엘리먼트가 있다. 엘리먼트는 값과 인덱스를 합친것을 말한다

 

 

2. 배열의 반복 순회 예제

 

student 라는 배열의 변수를 한 학급의 반으로 보고 , 그 반이라는 배열에서 학생은 하나의 엘리먼

 

트로 표현할 수 있다. 학생의 이름은 배열의 값, 학생의 인덱스는 학번으로 기능할 수 있다.

 

 

 

 

 

배열에는 여러 정보가 저장되어 있다. 이러한 다수의 정보를 처리하기 위한 방법은 반복이고 반복

 

과 결합하면 많은 정보도 효율적으로 처리할 수 있다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void main(String[] args) {
    
        String[] student = new String[5];
        //student 라는 하나의 변수에 여러 데이터를 담아보자
        student[0= "최진혁";
        student[1= "한이람";
        student[2= "최유빈";
        student[3= "한이은";
        student[4= "김주한";
       //위는 아래와 같은 표현
       //String[] student = {"최진혁","한이람","최유빈","한이은","김주한"};
        for(int i = 0; i < student.length; i++){
            System.out.println(student[i]);
        }
}
cs

 

 

 

 

 

1
2
3
4
5
최진혁
한이람
최유빈
한이은
김주한
 

3. 배열의 단점 예제

 

만약 위의 예제에서 한이은 학생이 전학을 갔다고 하자. 그럼 아래와 같이 처리할 수 있다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package Array;
    public class arrray02 {
    public static void main(String[] args) {
        
        String[] student = new String[5];
        student[0= "최진혁";
        student[1= "한이람";
        student[2= "최유빈";
        student[3= "한이은";
        student[4= "김주한";
        
        student[3= null;
        
        for(int i = 0; i < student.length; i++){
            System.out.println(student[i]);
        }
}
}
 
cs

 

 

 

 

 

1
2
3
4
5
최진혁
한이람
최유빈
null
김주한
cs

 

위 출력결과를 보면 null은 값이 없다는 의미인데, null이 포함되어 있다.  즉 처리되지 않아야 할 정

 

인 인덱스 3까지 결과에 포함되어 있는 것이다.

 

물론 위 14~16행을 다시 아래처럼 조건문으로 제외해도 된다. 

 

14
15
16
17
 for(int i = 0; i < student.length; i++){
            if(student[i] != null) {
            System.out.println(student[i]);
        }
 
cs
이것도 좋은 방법이지만 위와 같은 반복문이 수십 개 등장한다면 그만큼 조건문도 많아질 것이다
 
이것이 단점이다. 즉, 배열은 인덱스에 따라서 값을 유지하기 때문에 엘리먼트가 삭제돼도 빈자리
 
가 남게 된다.

 

 

4. 리스트

 

그래서 이를 리스트로 해결할 수 있다. 즉 삭제한 자리를 뒤에 위치한 엘리먼트로 메꾸는 것이다.

 

이렇게 데이터가 순서에 따라서 빈틈없이 연속적으로 위치하는 data structure를 리스트(list)라고 

 

한다.그런데 이렇게 해도 문제가 있다. 김주한 학생의 식별자인 인덱스 값이 4에서 3이 되었다. 

 

만약 인덱스 4를 이용해서 김주한 학생의 값을 가져오는 프로그램이 있다면 문제가 생길 것이다. 

 

5. 배열 vs 리스트

 

그럼 어떻게 해야 할까? 선택을 하면 된다. 

 

인덱스가 중요한 경우는 배열을 사용하고 null을 처리에서 제외해야 한다면 조건문을 사용하면 된

 

하지만 인덱스가 중요하지 않은 경우에는 리스트를 사용하면 된다.

 

즉 배열은 배열의 크기는 알려줘도 기본적으로 실제 값이 지정된 배열의 개수만을 알려주지는 않

 

는다. 바로 이런 이유에서 자바에서는 ArrayList나 LinkedList와 같은 리스트를 사용한다. 

 

리스트는 자동으로 엘리먼트를 수용할 수 있는 크기가 조정되고 또 리스트 내의 엘리먼트의 실제 

 

개수를 알려준다. 배열의 크기를 배열을 처음 생성할 때 지정하는 것이나, 배열의 크기를 변경할 

 

수 없는 것은 몹시 불편한 일이다. 또 배열에서 설정된 엘리먼트의 개수를 알아낼 수 없는 것도 불

 

편하다. 그렇다고 배열이 쓸모가 없는 것은 아니다. 데이터의 크기가 확정적일 때 배열을 사용하는

 

것이 메모리나 처리속도 면에서 좋다. 또한 배열은 다른 data structure의 부품이 되기도 한다.

 

기능이 최소한 일수록 좋은 부품이 될 수 있다. 

 

기능이 많으면 사용하기는 좋아도 그것을 사용할 수 있는 용도가 제한되기 때문이다. 

반응형

'Basic > 자료구조,알고리즘' 카테고리의 다른 글

ArrayList(어레이 리스트)  (1) 2018.11.29
배열과 리스트2  (0) 2018.11.29
추상자료형  (0) 2018.11.28
하노이타워(재귀)  (0) 2018.11.28
하노이타워(재귀)  (0) 2018.11.28