1. List 인터페이스 


# '순차 처리'를 위한 컬렉션이지만 멤버 객체는 중복될 수 있다. 


1) List 인터페이스 클래스 



2) List 인터페이스 메소드 



3) ArrayList 객체 생성하는 방법



# ArrayList 연습하기 (1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package collectionex;
 
import java.util.ArrayList;
 
public class CollectionTest01 {
    public static void main(String[] args) {
        
        // list.add(): 매개타입이 Object이기 때문에 모든 타입이 들어올 수 있다. 
        // 때문에 제네릭을 통해 타입을 지정해주는 것이다. 
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(100);
        list.add(200);
        System.out.println(list);
        
        System.out.println("list.get(0): " + list.get(0));
        System.out.println("list.get(1): " + list.get(1));
        
        list.remove(0);
        System.out.println(list);
        
    }
}
 
# 실행 결과
[100200]
list.get(0): 100
list.get(1): 200
[200]

cs


# ArrayList 연습하기 (2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package collectionex;
 
import java.util.ArrayList;
 
public class CollectionTest05 {
    public static void main(String[] args) {
 
        ArrayList<Integer> list = new ArrayList<Integer>();
        for(int i=1; i<7; i++) {
            list.add(i*10);
        }
        System.out.println(list);
        
        // 1. 30 > 300으로 변경 
        int idx = 0;
        if(list.contains(30)) {
            idx = list.indexOf(30);
            list.set(idx, 300);
            System.out.println("300으로 변경: " + list);
        }else {
            System.out.println("요소에 30은 없습니다.");
        }
        
        // 2. 20 뒤에 25를 추가 
        if(list.contains(20)) {
            idx = list.indexOf(20);
            list.add(idx+125);
            System.out.println("25를 추가: " + list);
        }else {
            System.out.println("요소에 20은 없습니다.");
        }
        
        // 3-1. 30 이상인 요소를 모두 제거
        list.remove(new Integer(60));
        System.out.println(list);
        
        // 3-2. 순차적으로 지우게 되면 순서가 있기 때문에 다음 요소를 가져오지 못한다. 
        /*
        for(int i=0; i<list.size(); i++) {
            if(list.get(i) >= 30) {
                list.remove(i);
            }
        }
        */
        
        // 3-2과 같은 문제는 마지막부터 삭제하면 해결할 수 있다.
        for(int i=list.size()-1; i>=0; i--) {
            if(list.get(i) >= 30) {
                list.remove(i);
            }
        }
        System.out.println("30이상 제거: " + list);
        
    }
}
 
# 실행 결과
[102030405060]
300으로 변경: [1020300405060]
25를 추가: [102025300405060]
[1020253004050]
30이상 제거: [102025]
cs

# 설명

Line 16: list에 요소 30이 있으면 이하 코드 실행

Line 17: 요소 30의 인덱스값을 가져와 idx에 저장한다. 

Line 18: idx을 인덱스값으로 지정하고 300을 저장한다. 

Line 34~45: remove() 메소드의 매개변수 타입으로는 Object o와 int index로 각각 받을 수 있다.

이때 remove(60);을 하게 되면 int index 타입으로 받아와 처리하여 범위 오류를 발생시킨다.

때문에 요소 60을 삭제하고자 한다면 new Integer(60);과 같이 작성하면 해결할 수 있다. 

Line 39~43: 30 이상인 요소들을 list의 앞에서부터 순차적으로 지우게 되면 순서가 있기 때문에 다음 요소를 가져오지 못한다. 

Line 47~51: 위와 같은 문제는 list의 마지막부터 삭제하면 해결할 수 있다.


# ArrayList 연습하기 (3)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package collectionex;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
 
public class CollectionEx01 {
    
    private final int MAX_INT = 9;
    private Random random = new Random();
    private ArrayList<Integer> arrayList = new ArrayList<Integer>();
    
    public void testArrayList() {
        // arrayList 초기값 설정 
        for(int i=0; i<MAX_INT; i++) {
            arrayList.add(random.nextInt(MAX_INT));
        }
        this.printMemeber(arrayList);
        arrayList.remove(2);
        this.printMemeber(arrayList);
        arrayList.add(8);
        this.printMemeber(arrayList);
        arrayList.clear();
        this.printMemeber(arrayList);
    }
    
    public void printMemeber(List<Integer> list) {
        int totalSize = list.size();
        
        if(list instanceof ArrayList) {
            System.out.print("ArrayList Member (" + totalSize + ") :");
        }
        
        // 강화된 for문을 이용하여 멤버 객체 확인 
        for(Integer item : list) {
            System.out.print("[" + item + "]");
        }
        System.out.println();
    }
    
    public static void main(String[] args) {
        
        CollectionEx01 col = new CollectionEx01();
        col.testArrayList();
        
    }
}
 
# 실행 결과
ArrayList Member (9) :[0][0][2][6][1][0][2][0][1]
ArrayList Member (8) :[0][0][6][1][0][2][0][1]
ArrayList Member (9) :[0][0][6][1][0][2][0][1][8]
ArrayList Member (0) :
cs

# 설명

Line 16~18: arrayList의 초기값을 랜덤으로 지정해준다. (중복 가능)

- 결과를 보았을때 arrayList는 중복된 데이터를 저장할 수 있고, 순차적으로 저장/출력이 됨을 알 수 있다.