[java] Collection

java.util.List

public interface List<E> extends Collection<E>

- 데이터 처리와 뷰를 분리하기 위하여 사용한다.

- 제너릭을 사용하지 않으면 모든걸 다 받는다. 다만 이럴 경우 리스트의 내용을 가져올 때 문제가 생긴다.(가져올 때 연산이 들어가면 에러가 발생한다.) 따라서 제너릭을 사용하여 제약을 걸어준다.
--------------------------------------------------------------------------------------------------

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class test {
    public static void main(String[] args) throws java.io.IOException {
        List list = new ArrayList();
        
        list.add("A");
        list.add("B");
        
        System.out.println(list.get(0)+list.get(1));
        //error msg : The operator + is undefined for the argument type(s) java.lang.Object, java.lang.Object
        
        List<String> list2 = new ArrayList<String>();
        
        list2.add("A");
        list2.add("B");
        
        System.out.println(list2.get(0)+list2.get(1));
    }// main end
}// class end

 

 

 

 

--------------------------------------------------------------------------------------------------

- List의 자손 중 ArrayList가 속도가 빠르기 때문에 잘 사용하는 편이다. 그러나 ArrayList의 경우 멀티쓰레드 환경에서 동시 접근이 가능하다라는 단점이 있다. 이와 반대로 Vector는 무거워서 속도는 느린편이지만 멀티쓰레드 환경에서 동시접근이 불가능하다.

[참고] StringBuilder도 동시접근이 가능하며 StringBuffer는 동시접근이 불가능하다.

 

Collection을 사용하는 이유

 번호 이름 
 1 이진기 
 2 김종현
 3 김기범 

 

 

 

 

 

Ex. 번호와 이름으로 이루어진 학생 데이터를 저장하여라

step1. 기본 데이터형

--------------------------------------------------------------------------------------------------

1
2
3
4
5
6
7
int num1 = 1;
int num2 = 2;
int num3 = 3;
        
String name1 = "이진기";
String name2 = "김종현";
String name3 = "김기범";

--------------------------------------------------------------------------------------------------

문제점 : 데이터마다 변수를 선언해주어야 하며 데이터가 전부 따로따로 논다.
 

 

step2. 도메인으로 묶기(클래스 이용)

--------------------------------------------------------------------------------------------------

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Student {
    public int num;
    public String name;
    
    public Student(int num, String name) {
        this.num = num;
        this.name = name;
    }
    
    public static void main(String[] args) {
        List<Student> list = new ArrayList<Student>();
        
        list.add(new Student(1, "이진기"));
        list.add(new Student(2, "김종현"));
        list.add(new Student(3, "김기범"));
        
        for(Student data:list){
            System.out.println(data.num+":"+data.name);
        }
    }
}

-------------------------------------------------------------------------------------------------문제점 : 번호와 이름을 짝지어 주었지만 학생들의 데이터가 전부 따로따로 논다.

 

step3. 컬렉션 사용

-------------------------------------------------------------------------------------------------

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Student {
    public int num;
    public String name;
    
    public Student(int num, String name) {
        this.num = num;
        this.name = name;
    }
    
    public static void main(String[] args) {
        List<Student> list = new ArrayList<Student>();
        
        list.add(new Student(1, "이진기"));
        list.add(new Student(2, "김종현"));
        list.add(new Student(3, "김기범"));
        
        for(Student data:list){
            System.out.println(data.num+":"+data.name);
        }
    }
}
 

 

-------------------------------------------------------------------------------------------------

- list변수 하나로도 여러 사람의 데이터를 저장할 수 있으며 인덱스를 통해 쉽게 접근 할 수 있다.