1. ArrayList란?
- ArrayList는 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일하다.
- ArrayList와 달리 Vector는 자체적으로 동기화처리 되어 있다.
- List인터페이스로 구현하기에 저장 순서가 상관 없이 유지되고 중복을 허용한다
- 데이터 저장공간으로 배열을 사용한다.(배열기반)
2. ArrayList의 메서드
3. 실습
package javajungsuk;
import java.util.ArrayList;
import java.util.Collections;
public class Java11_2_1 {
public static void main(String[] args) {
ArrayList list1 = new ArrayList(10);
//autoboxing에 의해서 기본형으로 들어간 원래는
//list1.add(new Integer(5));이렇게 쓰는 게 맞음
list1.add(5);
list1.add(4);
list1.add(2);
list1.add(0);
list1.add(1);
list1.add(3);
ArrayList list2 = new ArrayList(list1.subList(1, 4));
print(list1,list2);
//Collection - 인터페이스 / Collections - 유틸클래스
Collections.sort(list1);
Collections.sort(list2);
print(list1,list2);
//list2가 list1에 있는지 확인하는 코드
System.out.println("list1.containsAll(list2): "+list1.containsAll(list2));
//맨 뒤에 값을 추가해줘
list2.add("B");
list2.add("C");
//중간 3번째 자리에 A를 넣어라
list2.add(3,"A");
print(list1,list2);
//교체
list2.set(3, "AA");
print(list1,list2);
list1.add(0,"1");
//지정된 객체의 위치(인덱스)를 알려준다.
System.out.println("index = "+list1.indexOf("1"));
print(list1,list2);
list1.remove(new Integer(1));
print(list1,list2);
//list1[5]에 있는 객체 삭제
list1.remove(5);
print(list1,list2);
//겹치는 부분만 남기고 나머지는 삭제한다.
System.out.println("list1.retainAll(list2): " +list1.retainAll(list2));
print(list1,list2);
for (int i = list2.size()-1;i>=0;i--) {
if(true)
list2.remove(0);
}
print(list1,list2);
}
static void print(ArrayList list1, ArrayList list2) {
System.out.println("list1:"+list1);
System.out.println("list2:"+list2);
System.out.println();
}
}
4. ArrayList에 저장된 객체 삭제과정
- 중간에 있는 객체를 삭제하는 과정
- 삭제하고자 하는 값을 찾아 삭제해준다
- 삭제한 자리를 한 칸씩 땡겨준 뒤 사이즈에 맞게 빈 자리에 null을 넣어준다.
- 마지막으로 size를 빠진 값만큼 줄여준다.
- 첫 번째 객체부터 삭제하는 경우(배열 복사 발생)
for(int i = 0; i < list.size(); i++)
list.remove(i);
- 마지막 객체부터 삭제하는 경우(배열 복사 발생 안 함)
for(int i = list.size()-1; i >= 0; i--)
list.remove(i);
위에서부터 지우는 것보다 훨씬 빠르게 지울 수 있고 끝까지 지울 수 있어서 다지울 생각이라면 끝에서부터 지우는 것이 효율적이다.
'Java > 객체지향' 카테고리의 다른 글
[객체지향][자바의 정석] - 15. 스택과 큐 (0) | 2022.01.26 |
---|---|
[객체지향][자바의 정석] - 14. LinkedList (0) | 2022.01.26 |
[객체지향][자바의 정석] - 12.Collection 인터페이스의 메서드 (0) | 2022.01.25 |
[객체지향][자바의 정석] 10.2 - 형식화 클래스(숫자, 날짜) (0) | 2022.01.24 |
[객체지향][자바의 정석] - 10. 1 날짜와 시간 (0) | 2022.01.21 |