ArrayList

  • ArrayList는 자바의 List 인터페이스를 상속받은 여러 클래스 중 하나입니다.
  • 일반 배열과 동일하게 연속된 메모리 공간을 사용하며 인덱스는 0부터 시작합니다.
  • 배열과의 차이점은 배열이 크기가 고정인 반면 ArrayList는 크기가 가변적으로 변합니다.
  • 내부적으로 저장이 가능한 메모리 용량(Capacity)이 있으며 현재 사용 중인 공간의 크기(Size)가 있습니다.
  • 만약 현재 가용량(Capacity) 이상을 저장하려고 할 때 더 큰 공간의 메모리를 새롭게 할당합니다.

1. ArrayList 생성

ArrayList<Integer> integers1 = new ArrayList<Integer>(); // 타입 지정
ArrayList<Integer> integers2 = new ArrayList<>(); // 타입 생략 가능
ArrayList<Integer> integers3 = new ArrayList<>(10); // 초기 용량(Capacity) 설정
ArrayList<Integer> integers4 = new ArrayList<>(integers1); // 다른 Collection값으로 초기화
ArrayList<Integer> integers5 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5)); // Arrays.asList()
  • 보통 생성할 때는 new ArrayList<>()와 같이 타입을 생략해서 작성합니다.
  • ArrayList를 생성할 때 Set이나 다른 ArrayList를 전달하면 해당 Collections의 값들로 초기화됩니다.
  • 마지막으로 가변 인자를 전달받는 Arrays.asList()를 사용하면 기본 값들로 생성 가능합니다.

 

2. ArrayList  추가/변경

ArrayList<Integer> list = new ArrayList<>();

list.add(1); // 1 삽입
list.add(3);
list.add(1, 2); // 	index 1에 2 추가

System.out.println(list);
  • ArrayList를 생성한 후 add() 메소드로 엘레멘트를 추가할 수 있습니다.
  • 또한 set() 메소드로 기존에 추가된 값을 변경하는 것도 가능합니다.
  • add()는 기본적으로 리스트의 가장 끝에 값을 추가합니다.
  • 별도로 인덱스를 지정하면 해당 인덱스에 값이 추가되고 그 인덱스부터의 값들이 1 칸씩 밀립니다.

 

3. ArrayList 삭제

list.remove(2); // 2번 인덱스 삭제 => remove(index)
list.clear(); // 리스트의 모든 값 삭제

list.remove(list.indexOf(2)); // 리스트에 2를 포함한 인덱스 리턴 후 삭제
  • 추가했던 값을 삭제할 때는 remove() 메소드를 호출합니다.
  • 삭제할 때는 엘레멘트의 인덱스를 입력하거나 엘레멘트를 직접 입력할 수 있습니다.
  • 인덱스를 통해 삭제할 경우 삭제되는 엘레멘트를 리턴받을 수 있습니다.
  • 값을 지움과 동시에 해당 값으로 별도의 작업이 필요한 경우 리턴을 받아서 사용하면 됩니다.
  • ArrayList 안의 내용을 전체 삭제할 때는 clear()를 호출하면 됩니다.

 

4. ArrayList 전체 값 확인

System.out.println(list); // 리스트 전체 출력
System.out.println(list.get(2)); // 2번 인덱스 출력

for(int i : list) { 
    System.out.println(i);
}

Iterator iter = list.iterator(); // 반복자 사용
while(iter.hasNext()){
    System.out.println(iter.next()); 
}
  • for-each 반복문으로 각각의 값을 순회해서 출력하는 것이 가능합니다.
  • 또한 get() 메소드로 각 인덱스의 값을 순차적으로 탐색하는 방법도 가능합니다.
  • 그리고 iterator나 listIterator를 통해 값들을 순회하는 것도 가능합니다.
  • listIterator의 경우 생성 시 ArrayList의 크기를 입력해주고 역방향으로 출력할 수 있습니다.

 

5. 값 존재 유무 확인

int index = list.indexOf(2); // 원하는 값의 인덱스를 리턴, 없으면 -1 리턴
boolean b = list.contains(2); // 원하는 값의 존재 유무

while(list.indexOf(2) == -1) { // 리스트에 원하는 값 모두 삭제
	list.remove(list.indexOf(2));
}
  • 먼저 값이 존재하는지만 알고 싶은 경우 contains()를 사용합니다.
  • 값이 존재할 때 어느 위치에 존재하는지 알고 싶은 경우 indexOf()를 사용할 수 있습니다.
  • contains()는 값이 있는 경우 true를, 값이 없는 경우 false를 리턴합니다.
  • indexOf()는 값이 존재하는 경우 해당 엘레멘트의 인덱스를 리턴합니다. 값이 존재하지 않을 경우 -1을 리턴하기 때문에 별도로 처리가 가능합니다.

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

[19] JAVA 패키지와 접근 제한자  (0) 2022.11.29
[18] JAVA 인스턴스(객체) Instance  (0) 2022.11.27
[16] JAVA 메소드  (0) 2022.11.24
[15] JAVA 생성자 (Constructor)  (0) 2022.11.24
[14] JAVA Math 클래스 메소드  (0) 2022.11.23

+ Recent posts