Java. 배열리스트(ArrayList)

kimkim·2024년 9월 2일

Java. 공부내용정리

목록 보기
15/38

배열리스트(ArrayList)

배열의 단점

  • 삭제

    • 배열에서 한 요소를 삭제하는 것이 불편하다.
    • 삭제하려면 하나를 지우고 이후에 있는 요소들을 하나씩 당겨와야한다
    • 배열에서 요소를 삭제하는 것은 불가능하므로 삭제된 것처럼 보이게 해야한다.
  • 입력 되어 있는 요소 세기

    • 배열의 길이를 셀 수 있지만 입력받는 배열이라면 입력되어있는 값만 세기 힘들다.
    • 공란 없이 입력 되어 있는 배열의 수를 세려면 배열요소를 입력할 때 요소의 수를 세주는 변수를 써야한다.
  • 길이가 고정되어 있다

    • 유연성이 떨어지고 삭제나 추가기능이 복잡하다.

배열리스트(ArrayList)

: 배열의 단점을 보안하기 위해 쓰는 유동적인 배열리스트

import java.util.ArrayList; class 앞에 붙이기

import java.util.ArrayList;
: ArrayList 클래스 쓰기 위해 필요한 구문

생성


import java.util.ArrayList;

public class ArrayListExam {
    public static void main(String[] args) {
		// 배열 
		int[] arr = new int[5]; // 길이가 5인 숫자 배열
        // > 길이가 정해짐
		// ArrayList
		ArrayList<Integer> list = new ArrayList<>();
        // > 길이가 안 정해짐
    }
}

추가


import java.util.ArrayList;

public class ArrayListExam {
    public static void main(String[] args) {
    	// 배열 -> 추가 x
		// ArrayList -> 추가 o
        // 뒤에서 부터 추가되어 앞에서 부터 채움
        
       	list.add(1); // 인덱스 0번 방에 1 추가
        list.add(2); // 인덱스 1번 방에 2 추가
    }
}

조회


import java.util.ArrayList;

public class ArrayListExam {
    public static void main(String[] args) {
    	// 배열 
        System.out.println(arr[0]); // arr 배열의 0번방 조회
        System.out.println(arr[1]); // arr 배열의 1번방 조회
        System.out.println(arr[2]); // arr 배열의 2번방 조회
        
        // ArrayList
        System.out.println(list.get(0)); 
        // list 배열의 0번방 조회
        System.out.println(list.get(1)); 
        // list 배열의 1번방 조회
        // list 배열이 없는데 조회되면 방이 
        // 존재하지 않기 때문에 에러가 남
    }
}

수정


import java.util.ArrayList;

public class ArrayListExam {
    public static void main(String[] args) {
    	// 배열
        arr[0] = 10; // arr 배열의 0번 방의 값을 10으로 수정.
        System.out.println(arr[0]);
        // ArrayList
        list.set(0, 10); // list 배열의 0번 방의 값을 10으로 수정.
        System.out.println(list.get(0));
    }
}

삭제


import java.util.ArrayList;

public class ArrayListExam {
    public static void main(String[] args) {
		// 배열 -> 삭제 X
        // ArrayList
        System.out.println(list.get(0));
        System.out.println(list.get(1));

        list.remove(0); // 0번방의 값을 삭제. 
        //삭제하면 뒤에 있는 요소들이 앞으로 땡겨짐

        System.out.println(list.get(0));
        // System.out.println(list.get(1)); 
        // 삭제로 인해 1번방이 존재하지 않기 때문에 에러가 남
    }
}

데이터의 개수 확인


import java.util.ArrayList;

public class ArrayListExam {
    public static void main(String[] args) {
    	// 배열 => length를 제공하기는 하지만 데이터의 개수랑 무관
        // 따로 내가 변수에 직접 보관해야 함.

        // ArrayList
        System.out.println(list.size()); // 1
        list.add(2);
        list.add(3);
        System.out.println(list.size()); // 3
    }
}

ArrayList의 타입(자료형)

: ArrayList는 자료형이 객체타입 이다.

※ 자료형

객체형 자료형
정수 - Integer
문자 - String

원시형 자료형
정수 - int
논리값 - boolean
실수 - double

사용법

import java.util.ArrayList;

public class ArrayListExam2 {
    public static void main(String[] args) {
		ArrayList<Integer> arr = new ArrayList<>();
        // 정수
        ArrayList<String> arr2 = new ArrayList<>();
        // 문자
        ArrayList<Person> arr3 = new ArrayList<>();
        // Person 클래스
        ArrayList<Car> arr4 = new ArrayList<>();
		// Car 클래스
	}
}

ArrayList 활용

: ArrayList에는 많은 데이터가 있을 수 있기 때문에,
전체 순회를 통해서 원하는 값을 찾을 수 있어야한다.

예시

import java.util.ArrayList;

publid class ArrayList{
	public static void main(String[] arge){
    	 
         ArrayList<String> name = new ArrayList<>();
         // 새로운 ArrayList를 생성하고,name이라는 변수에
         // ArrayList를 조종할 수 있는 리모컨을 담아줌
         
         names.add("황진이");
         // name에 있는 리모컨을 조종하여 ArrayList의 0번에 저장
         names.add("임꺽정");
         // name에 있는 리모컨을 조종하여 ArrayList의 1번에 저장
         names.add("강감찬");
         // name에 있는 리모컨을 조종하여 ArrayList의 2번에 저장
         names.add("을지문덕");
         // name에 있는 리모컨을 조종하여 ArrayList의 3번에 저장
         names.add("정약용");
         // name에 있는 리모컨을 조종하여 ArrayList의 4번에 저장

		for(int i = 0; i < name.size();i++){
        // 숫자를 담을 수 있는 i변수에 0을 담고, 
        // name에 저장되어있는 배열의 리모컨으로 배열의 길이(5)확인하여
        // i는 배열의 길이(5)만큼 1씩 증가한다.
        	if(names.get(i).equals("임꺽정")){
            // 만약 name에 저장되어 있는 배열의 리모컨을 조종해서 
            // 배열 i방에 "임꺽정"이 있다면
            	names.set(i,""심사임당");
                // name에 저장되어 있는 배열의 리모컨을 조종해서 
                // i방에 있는 "임꺽정"을 "심사인당으로 바꿔줘
            }
            
            if(names.get(i).equals("울지문덕"){
            // 만약 name에 저장되어 있는 배열의 리모컨을 조종해서
            // 배열 i방에 "을지문덕"이 있다면
            	name.set(i, "유관순")
                // name에 저장되어 있는 배열의 리모컨을 조종해서
                // i방에 있는 "을지문덕"을 "유관순"으로 바꿔줘 
            }
        }
	}
}

0개의 댓글