Post

Collection Framework_List

✅ Java List

스크린샷 2023-12-21 오전 1 39 57

용도: 순서가 있는 data collection
예시: 쇼핑몰 사이트 찜목록
구현 class:

  • ArrayList(Array구조 기반)
  • LinkedList(Node구조 기반) class로 구현
    내부적으로 toString()이 포함되어 있다.

💡 List의 method

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
public static void main(String[] args) {
        //generic
        List<String> fruitList= new ArrayList<>();

        //💡 add: 리스트의 끝에 요소를 추가
        //array는 순차적, 넣는 순서대로 들어간다
        fruitList.add("Orange");
        fruitList.add("Apple");
        fruitList.add("Banana");
        fruitList.add("Kiwi");
        System.out.println("FruitList 요소: "+ fruitList); //FruitList 요소: [Orange, Apple, Banana, Kiwi]

        //💡add(int index, E element) 지정된 인덱스에 요소 삽입
        //사이에 넣기
        fruitList.add(3, "Mango"); //New FruitList 요소: [Orange, Apple, Banana, Mango, Kiwi]

        //💡remove(int index) 지정된 인덱스의 요소 제거
        fruitList.remove(3); //Removed FruitList 요소: [Orange, Apple, Banana, Kiwi]

        //💡get(int index) 지정된 인덱스의 요소 반환
        String getFruit= fruitList.get(2); //Banana

        //💡set(int index, E element) 지정된 인덱스의 요소를 새로운 요소로 대체
        fruitList.set(3, "Pineapple"); //Set FruitList 요소: [Orange, Apple, Banana, Pineapple]

        //💡size() 리스트의 element 수 반환
        int fruitListSize= fruitList.size(); //4

        //💡isEmpty() 리스트가 비어있는지 확인
        boolean fruitListEmpty= fruitList.isEmpty(); //false


        //💡contains(Object o) 리스트에 지정된 element 있는지 확인
        boolean fruitListContains1= fruitList.contains("Banana"); //true
        boolean fruitListContains2= fruitList.contains("DragonFruit"); //false

        //💡indexOf(Object o) 지정된 요소의 첫 번째 등장 인덱스 반환
        int fruitListIndexOf1= fruitList.indexOf("Apple"); //1
        int fruitListIndexOf2= fruitList.indexOf("Lemon");  //-1 (찾는 element없으면 -1)

        //💡clear() 리스트의 모든 요소 제거
        fruitList.clear(); // size = 0

    }

ArrayList 🆚 LinkedList

Java List에는 두 종류가 있음

  • ArrayList: array 기반, 순차적
  • LinkedList: node 기반, 프레임
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
63
64
65
66
67
68
69
70
public class ListGetPerfomanceTest {
    static final int listSize=10000;
    public static void main(String[] args) {

        // 🏢 ArrayList
        List<Integer> integerList1= new ArrayList<>();

        for(int i=0; i<listSize; i++){
            integerList1.add(i);
        }
        // ⛺️ LinkedList
        List<Integer> integerList2= new LinkedList<>();

        for(int i=0; i<listSize; i++){
            integerList2.add(i);
        }

        //💡 ArrayList 🆚 LinkedList GET Performance 비교
        long startTime;
        long endTime;
        // 🏢 ArrayList
        startTime= System.currentTimeMillis();
        for(int i=0; i<listSize; i++){
            integerList1.get(i);
        }
        endTime= System.currentTimeMillis();
        System.out.println("ArrayList get걸린 시간: " + (endTime-startTime)+ " milliseconds" );
        //listSize=10000 일 떄
        //ArrayList get걸린 시간: 1 milliseconds

        // ⛺️ LinkedList
        startTime= System.currentTimeMillis();
        for(int i=0; i<listSize; i++){
            integerList2.get(i);
        }
        endTime= System.currentTimeMillis();
        System.out.println("LinkedList get걸린 시간: " + (endTime-startTime)+ " milliseconds" );

        //listSize=10000 일 떄
        //LinkedList get걸린 시간: 50 milliseconds
        // ⭐️ get 의 경우 🏢 ArrayList가 더 빠르다

        //💡ArrayList 🆚 LinkedList REMOVE Performance 비교

        // 🏢 ArrayList
        startTime= System.currentTimeMillis();
        for(int i=0; i<listSize; i++){
            integerList1.add(i);
            if(i%5==0) {integerList1.remove(0);}
        }
        endTime= System.currentTimeMillis();
        System.out.println("ArrayList get걸린 시간: " + (endTime-startTime)+ " milliseconds" );
        //listSize=10000 일 떄
        //ArrayList get하고 remove까지 걸린 시간: 4 milliseconds

        // ⛺️ LinkedList
        startTime= System.currentTimeMillis();
        for(int i=0; i<listSize; i++){
            integerList2.add(i);
            if(i%5==0) {integerList2.remove(0);}
        }
        endTime= System.currentTimeMillis();
        System.out.println("LinkedList get걸린 시간: " + (endTime-startTime)+ " milliseconds" );
        //listSize=10000 일 떄
        //LinkedList get하고 remove까지 걸린 시간: 1 milliseconds
        // ⭐️ remove 의 경우 ⛺️ LinkedList가 더 빠르다

    }
}

This post is licensed under CC BY 4.0 by the author.