Home NhnAcademy 선발교육과정 11일차
Post
Cancel

NhnAcademy 선발교육과정 11일차

List

  • 중복을 허용하면서 저장순서

ArrayList

  • ArrayList 크기는 가변적으로 변함
  • ArrayList에 지정한 Capacity 이상을 저장하려고 할 때 메모리에 추가로 할당합니다.
  • List<Integer> list = new ArrayList<>() Integer형태의 배열 생성된다.
  • 배열 크기가 넘어가는 데이터가 들어오면 사이즈가 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
public class Example05 {
  public static void main(String[] args) {
    System.out.println("### list1 ###");

    List<String> list  = new ArrayList();
    list.add("red");
    list.add("green");
    list.set(0,"white");
    list.add("blue");

    for(int i=0; i<list.size(); i++){
      System.out.println(list.get(i));
    }

    System.out.println("### remove white element ###");
    list.remove("white");

    for(int i=0; i<list.size(); i++){
      System.out.println(list.get(i));
    }

    System.out.println("### contains green element");
    System.out.println( list.contains("green") );

  }
}

set을 통해 List해당 자리의 값을 변경할 수 있고, remove를 통해 해당 값을 list에서 삭제할수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Example06 {

  private static final int ARRAY_MAX_SIZE = 10000000;

  public static void main(String[] args) {
    long start = System.currentTimeMillis();
    int[] arr = new int[ARRAY_MAX_SIZE];
    for(int i=0; i<ARRAY_MAX_SIZE; i++) arr[i]=i;
    long end = System.currentTimeMillis();
    long result = end - start;
    System.out.println("array-run-time: "+result);

    start = System.currentTimeMillis();
    ArrayList<Integer> arr2 = new ArrayList<>();
    for(int i=0;i<ARRAY_MAX_SIZE;i++) arr2.add(i);

    end = System.currentTimeMillis();
    result = end -start;
    System.out.println("arrayList-run-time: "+result);
}
}

ArrayList의 경우 사이즈가 늘어날때 마다 크기를 늘리기 때문에 list와 비교했을때 15배 이상 시간이 소요되는 것을 알 수 있다.

1
2
array-run-time: 20
arrayList-run-time: 307
  • 타입을 적는 이유
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    public class Test{
    
    public static void main(String[] args) {
      List list = new ArrayList<>();
      User user = new User("name",20);
      list.add(user);
      list.add(10);
    }
    }
    class User{
    String name;
    int age;
    //... Getter , Constructor
    }
    
  • 위와 같이 list 타입을 선언 안할 경우 어떤 타입이든 모두 넣을 수 있다. 그러면 왜 타입을 지정하는가?
    • 타입을 지정하지 않으면 모든 타입을 넣을수 있어서 좋아 보일 수 있다.
    • 하지만 User에 있는 Getter를 list를 통해 호출할려고 하면 할수가 없다. 그이유는 User라는 타입으로 저장되는 것이 아닌 Object 타입으로 저장되기 때문이다.

Vactor

  • Vector Collection Framework가 추가되기전 추가된 레거시 클래스 입니다.
  • Vector는 재너릭을 사용할 수 있도록 설계 되었습니다.
  • Arraylist와 유사함, 크기가 가변적으로 변경됨
    • Multi-Thread 환경에서 안전함
      • 동기화 비용에 발생하여 ArrayList 보다 성능이 떨어진다.

Stack

  • Stack은 Vector를 상속한 클래스
  • Stack은 나중에 입력된 데이터가 가장 먼저 나오는 LIFO 구조를 가지고 있다.

Comparable

  • Java에서 객체는 Comparable 인터페이스를 구현하면 비교할 수 있습니다.
This post is licensed under CC BY 4.0 by the author.