ArrayList란??
- List 인터페이스를 상속받은 클래스로 크기가 가변적으로 변하는 선형리스트
- 일반적인 배열과 같은 순차리스트이며 인덱스로 내부의 객체를 관리한다는 점이 유사하지만, 한번 생성되면 크기가 변하지 않는 배열과는 달리 ArrayList는 객체들이 추가되어 저장 용량을 초과한다면 자동으로 부족한 크기만큼 저장 용량이 늘어남
- ArrayList에서 특정 인덱스의 객체를 제거하게 되면, 제거한 객체의 인덱스부터 마지막 인덱스까지 모두 앞으로 1칸씩 앞으로 이동, 추가 시 뒤로 1칸씩 이동
- 인덱스 값을 유지하기 위해서 추가/삭제 시 전체 객체 위치가 이동
- 잦은 원소의 이동, 삭제가 발생할 경우 ArrayList보다 LinkedList 사용이 나음
배열과 ArrayList의 차이
- 배열은 크기가 고정되어있지만 arrayList는 사이즈가 동적인 배열
- 배열은 primitive type(int, byte, char..)과 object 모두를 담을 수 있지만, arrayList는 타입 안정성을 보장해주는 제네릭을 사용할 수 있다
제네릭이란??
- 파라미터 타입이나 리턴 타입에 대한 정의를 외부로 미룬다
- 타입에 대해 유연성과 안정성을 확보한다
- 런타임 환경에 아무런 영향이 없는 컴파일 시점의 전처리 기술이다
List<Interger> list1 = new ArrayList<>();
- 길이에 대한 배열은 length 변수를 쓰고, arrayList는 size() 메소드를 씀
- 배열은 elements들을 할당하기 위해 assignment 연산자를 써야하고, arrayList는 add()메서드를 통해 element를 삽입
ArrayList Method
추가 : add()
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(null);
list.add(5,10);
추가 : remove()
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
list.remove(1);
list.clear();
크기 : size()
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
System.out.println(list.size());
크기 : size()
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
System.out.println(list.get(0));
for(Integer i : list) {
System.out.println(i);
}
Iterator iter = list.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
값 검색 : cotains() indexOf()
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
System.out.println(list.contains(1));
System.out.println(list.indexOf(1));
정렬 : sort()
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
Collections.sort(list);