본문 바로가기

Language/Java

[JAVA] ArrayList

1. 배열 vs 컬렉션 프레임워크 

 (1) 배열

배열은 크기가 정해져 있음. 따라서 배열이 꽉 찼는데, 값을 더 추가해야 하는 경우, 넉넉한 크기로 배열을 새로 만들어야함. 거기다가 기존의 값들 저장 + 새로운 값들 저장 시켜야함. 

배열은 특정 인덱스의 원소 값을 삭제하면, 거기가 그냥 비어있는 체로 있음. (크기가 동적으로 변화하지 않기 때문)

 (2) 컬렉션 프레임워크

정적인 배열에 값을 저장하는 것은 데이터들을 관리하는데 번거로운 점이 있음. 

컬렉션 프레임워크는 많은 양의 데이터들을 더 쉽고, 편리하게, 효율적으로 관리할 수 있도록 JAVA에서 제공하는 클래스의 모임이다.

컬렉션 프레임은 자바와 달리 크기가 동적으로 변해서, 원하는 만큼 데이터 추가, 삭제가 가능하다. 

원하는 값 탐색, 특정 값 변경, 원소 값들의 정렬도 가능하다.

 

컬렉션 프레임워크의 종류로는 List, Set, Map이 있다. 

List도 2가지 종류로 나뉘는데, ArrayList와 LinkedList이다. 우리는 여기서 ArrayList를 먼저 알아보겠다.

2. 코드 보기 

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

public class _04_ArrayList {
    public static void main(String[] args) {

	//ArrayList 선언 ( <>안에 쓰일 자료형 적어주면 된다.)
        ArrayList<String> list = new ArrayList<>();

        // 1. 데이터 추가: 리스트_이름.add(추가할 값)
        list.add("유재석");
        list.add("조세호");
        list.add("김종국");
        list.add("박명수");
        list.add("강호동");

        // 2. 데이터 조회 (인덱스 이용): 리스트_이름.get(조회할 값의 index)
        System.out.println(list.get(0));
        System.out.println(list.get(1));
        System.out.println(list.get(2));
        System.out.println(list.get(3));
        System.out.println(list.get(4));

        System.out.println("-------------------------------");

        // 3. 데이터 삭제 (박명수 씨가 이사): 리스트_이름.remove(조회할 값의 인덱스 or 값 자체)
        System.out.println("신청 학생 수 (이사 전): " +list.size()); // 5
        list.remove("박명수");
        System.out.println("신청 학생 수 (이사 후): " +list.size()); // 4
        System.out.println(list.get(3));

        System.out.println("-------------------------------");

        System.out.println("남은 학생 수 (제외 전): " + list.size()); // 4
        list.remove(list.size() - 1);
        System.out.println("남은 학생 수 (제외 후): " + list.size()); // 3

        System.out.println("-------------------------------");

        // 순회
        for (String s:  list) {
            System.out.println(s);
        }

        System.out.println("-------------------------------");


        // 4. 변경 (수강권 양도): 리스트_이름.set(index, 바꿔넣을 값)
        System.out.println("수강권 양도 전: " + list.get(0));
        list.set(0,"이수근");
        System.out.println("수강권 양도 후: " + list.get(0));

        System.out.println("-------------------------------");

        // 5-1. 인덱스가 몇 인지 확인:  리스트_이름.indexOf(확인하고 싶은 값)
        System.out.println(list.indexOf("김종국"));

        // 5-2. 리스트 내에 값이 포함되어 있는지 확인: 리스트_이름.contains(확인할 값)
        if(list.contains("김종국")) {
            System.out.println("수강 신청 성공");
        }
        else {
            System.out.println("수강 신청 실패");
        }
        System.out.println("-------------------------------");

        // 6. 전체 삭제: 리스트_이름.clear();
        list.clear();
        if(list.isEmpty()) {
            System.out.println("학생 수: " + list.size());
            System.out.println("리스트가 비었습니다.");
        }

        System.out.println("-------------------------------");

        // 다음 학기에 새로 공부 시작
        list.add("유재석");
        list.add("조세호");
        list.add("김종국");
        list.add("박명수");
        list.add("강호동");

        // 7. 정렬 Collections.sort(리스트_이름)
        Collections.sort(list);
        for (String s :
                list) {
            System.out.println(s  );
        }


    }
}

3. 스스로 해보기

package WorkOut_Myself;

import java.util.ArrayList;
import java.util.Collections;

public class ArrayList_Myself {
    public static void main(String[] args) {

        //선언
        ArrayList<String> King = new ArrayList<>();

        // 데이터 추가
        King.add("이민혁");
        King.add("이상로");
        King.add("정재욱");
        King.add("이지훈");
        King.add("한규범");

        // 데이터 조회
        System.out.println(King.get(0)+" " + King.get(1)+" " +King.get(2)+" " +King.get(3)+" " +King.get(4));

        System.out.println("-------------------------------------");

        // 원소 하나만 삭제
        System.out.println("데이터 하나 삭제 전 전체 갯수: " + King.size());
        King.remove("이상로");
        System.out.println("데이터 하나 삭제 후 전체 갯수: " +King.size());
        System.out.println("한규범의 index는? " + King.indexOf("한규범"));

        System.out.println("-------------------------------------");

        // 데이터 순회
        for (String s :
                King) {
            System.out.println(s);
        }

        System.out.println("-------------------------------------");

        // 데이터 변경
        King.set(3,"범규한");
        System.out.println("리스트 index 3번의 값: " + King.get(3));


        for (int i = 0; i < King.size(); i++) {
            System.out.println((i+1)+ "번의 값: " + King.get(i));
        }

        System.out.println("-------------------------------------");

        // 해당 원소의 인덱스가 몇인지 확인

        System.out.println("이민혁의 인덱스 값은? "+King.indexOf("이민혁"));

        // 리스태 내에 해당 값이 있는지 확인
        if(King.contains("이지훈"))
        {
            System.out.println("이지훈이 있습니다.");
        } else {
            System.out.println("이지훈이 없습니다.");
        }

        System.out.println("-------------------------------------");

        // 리스트 전체 삭제
        King.clear();
        if(King.isEmpty()){
            System.out.println("King 안이 비었습니다.");
        } else {
            System.out.println("King 안에 값이 있습니다.");
        }
        System.out.println("-------------------------------------");

        // 리스트 정렬
        King.add("이민혁");
        King.add("이상로");
        King.add("정재욱");
        King.add("이지훈");
        King.add("한규범");
        King.add("김택환");
        King.add("장현우");
        King.add("JJK");
        King.add("Albert");
        King.add("김킴김");


        Collections.sort(King);

        for (int i = 0; i < King.size(); i++) {
            System.out.println((i+1)+ "번의 값: " + King.get(i));
        }


    }
}

'Language > Java' 카테고리의 다른 글

[JAVA]HashSet  (0) 2023.02.09
[JAVA] Linked List  (0) 2023.02.08
[JAVA] Wrapper Class  (0) 2023.02.07
[JAVA]Generics 심화  (0) 2023.02.06
[JAVA] Generic Class  (0) 2023.02.03