ArrayList
기존의 배열 불편한 점
배열의 크기를 미리 할당하고 해당 크기 안에서만 사용가능
만약 더 많은 데이터를 담거나 데이터를 삭제 시 배열의 크기를 변경시키고 index 변경을 해야한다.
배열의 크기를 미리 할당하지 않고 데이터를 자유롭게 추가 및 삭제하고 싶다면
ArrayList를 사용하는 것이 하나의 방법이다.
ArrayList는 일반 배열과 동일하게 인덱스 0부터 연속적인 메모리 공간을 사용한다.
내부적으로는 저장이 가능한 메모리 용량(capacity)과 현재 사용 중인 공간의 크기(size)가 존재한다.
[ 선언법 ]
import java.util.ArrayList;
ArrayList list = new ArrayList(); // 데이터타입 선언을 하지않는 경우 object로 설정
ArrayList <Integer> = new ArrayList<Integer>();
[ 데이터 추가 ]
list.add(null) // null 삽입 가능
list.add(3) // 데이터 타입에 맞는 데이터 삽입
list.add(5,10) // 5번 인덱스에 10 데이터 삽입
[ 데이터 삭제 ]
list.remove(index) // 해당 index의 데이터 삭제 - 인덱스로 삭제시 삭제되는 데이터 리턴도 함
list.remvoe("plz remove") // 해당 데이터 삭제
list.clear() // arraylist의 모든 데이터 삭제
[ 데이터 접근법 ]
list.get(index); // 해당 Index의 데이터 반환
//iterator사용 -> arraylist의 데이터를 where문을 돌면서 순서대로 접근
iterator it = list.iterator;
where(it.hasnext()){
System.out.println(it+" ");
}
//for each문
for(int i : list){
System.out.println(i+" ");
}
[ 데이터 존재여부 확인 ]
list.contains(값); // true, false 반환
list.indexOf(index); //리스트의 앞쪽부터 인자와 동일한 데이터가 있는지 찾으며
//해당 데이터가 없는 경우 -1 출력, 데이터가 있는 경우 index 출력
[ 데이터 크기 확인 ]
list.size();
ArrayList 배열
알고리즘 문제[백준 - 11724]를 푸는데
비정형 배열을 사용하면 너무 쉽게 데이터를 저장하고 접근할 수 있을 것 같았다.
하지만 문제는 데이터 크기가 정해져 있지 않고 사용자의 입력에 따라 달라진다는 점에서 자바의 비정형 배열을 사용할 수 없었고
그래서 찾다 보니 ArrayList를 배열로도 사용할 수 있다길래 정리해 두기로 했다.
( 자바 공부 안 한 지 어연 2년.. 정말 거의 다 까먹어버렸다. )
[ 선언법 ]
ArrayList <Integer> [] arr = new ArrayList[size];
for(int i=0;i<size;i++){
arr[i] = new ArrayList<Integer>();
}
[ 배열 데이터 추가하고 담긴 데이터 확인해 보기 ]
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// ArrayList 배열크기
int node = sc.nextInt();
// 데이터 입력 횟수
int li = sc.nextInt();
//arraylist 선언 및 초기화
ArrayList<Integer>[] ll = new ArrayList[node + 1];
for (int i = 1; i < node + 1; i++) {
ll[i] = new ArrayList<Integer>();
}
//데이터 삽입
for (int i = 1; i < li + 1; i++) {
int s = sc.nextInt();
int e = sc.nextInt();
ll[s].add(e);
ll[e].add(s);
}
//데이터 출력
System.out.println("-------------------");
for (int i = 1; i < node + 1; i++) {
System.out.print("arraylist[" + i + "] : ");
for (int k : ll[i]) {
System.out.print(k + " ");
}
System.out.println();
}
sc.close();
}
}
'Java' 카테고리의 다른 글
[ Java ] 1차원, 2차원 배열 복사 - 깊은 복사와 얕은 복사 (1) | 2024.02.08 |
---|---|
[ Java ] int을 String으로, String을 int로 바꾸기 (0) | 2024.01.30 |
[ JAVA ] Queue 클래스 (0) | 2023.11.06 |
Java - 오버라이딩(Overriding)과 오버로딩(Overloading) (0) | 2022.09.06 |
Java - 입력에서 문자(char) 하나 받아오기 (0) | 2022.09.05 |