728x90
반응형
* 해당 포스팅은 JAVA의 정석을 복습한 내용입니다
ArrayList
- ArrayList는 컬렉션 프레임웍에서 가장 많이 되는 컬렉션 클래스
- ArrayList는 List 인터페이스를 구현하기 때문에 데이터의 저장 순서가 유지되고 중복을 허용한다.
- ArrayList는 기존의 Vector를 개선 -> Vector와 구현원리와 기능적인 측면에서 동일
=> Vector 와 ArrayList 중 가능하면 ArrayList를 사용하는 것을 권장
public class ArrayList extends AbstractList
implements List, RandomAccess, Cloneable, java.io.Serializable {
'''
transient Object [ ] elementData; // Object배열
'''
}
- ArrayList는 elementData라는 이름의 Object 배열을 멤버 변수로 선언하고 있다.
- 선언된 배열의 타입이 모든 객체의 최고 조상인 Object이기 때문에 모든 종류의 객체를 담을 수 있다.
생성자 및 메서드(Constructors and Method)
- ArrayList 에서 주로 사용되는 생성자와 메서드를 정리해보았다.
메서드 | 설 명 |
ArrayList(10) | 크기가 10인 ArrayList 생성 |
ArrayList(Collection c) | 주어진 컬렉션이 저장된 ArrayList 생성 |
ArrayList (int initialCapacity) | 지정된 초기용량을 갖는 ArrayList를 생성 |
void add(int index, Obejct element) | 지정된 위치(index)에 객체 저장 |
void clear( ) | ArrayList 완전히 비움 |
Object clone( ) | ArrayList 복제 |
boolean contains(Object o) | 지정된 객체 o 가 ArrayList에 포함되어있는지 확인 |
Object get(index) | 지정된 위치(index)에 저장된 객체 반환 |
int indexOf(Object o) | 지정된 객체가 저장된 위치를 찾아 반환 |
boolean isEmpty( ) | ArrayList가 비었는지 확인 |
int lastIndexOf(Object o) | 객체 o 가 저장된 위치를 끝부터 역방향으로 검색해서 반환 |
Object remove(int index) | 지정된 위치에 있는 객체 제거 |
boolean remove(Object o) | 지정한 객체를 제거한다. 성공 true, 실패 false |
boolean removeAll(Collection c) | 지정한 컬렉션에 저장된 것과 동일한 객체들을 ArrayList에서 제거 |
boolean retainAll(Collection c) | ArrayList에 저장된 객체 중에 주어진 컬렉션과 공통된것들만 남기고 나머지 삭제 |
Object Set(int index, Object element) | 주어진 객체 element 를 지정된 위치 index 에 저장한다 |
int size( ) | ArrayList에 저장된 객체 개수 반환 |
void sort(Comparator c) | 지정된 정렬기준(c)로 ArrayList정렬 |
List subList(int fromIndex, int toIndex) | fromIndex로 부터 toIndex사이에 저장된 객체 반환 |
void trimToSize( ) | 용량을 크기에 맞게 줄인다 |
package ch11;
import java.util.*;
public class ArrayListEx1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList list1 = new ArrayList(10);
list1.add(new Integer(5));
list1.add(new Integer(4));
list1.add(new Integer(2));
list1.add(new Integer(0));
list1.add(new Integer(1));
list1.add(new Integer(3));
//sublist(시작인덱스, 끝인덱스) : list1의 [1]번자리 부터 [4번]자리 전 까지 저장된 값 list2에 넣기 [1~3]
ArrayList list2 = new ArrayList(list1.subList(1, 4));
// 리스트 출력 (사용자 정의 함수)
System.out.println("=====초 기 상 태=====");
print(list1, list2);
// Collections.sort(리스트변수)를 이용해 list1, list2 정렬 <오름차순>
Collections.sort(list1);
Collections.sort(list2);
System.out.println("=====정 렬 상 태=====");
print(list1, list2);
//list1.containsAll(list2) : list1이 list2의 모든 요소를 포함하고 있을 때만 True 반환
System.out.println("list1.containsAll(list2) : " + list1.containsAll(list2));
// 순차적으로 삽입
list2.add("B");
list2.add("C");
list2.add(3,"A"); //[3]번 위치에 "A" 삽입
System.out.println("=====데이터 삽입=====");
print(list1, list2);
/*
* 출력 결과
list1 [0, 1, 2, 3, 4, 5]
list2 [0, 2, 4, A, B, C] <- add(Object obj)를 이용해 새로운 객체 저장
*/
System.out.println("=====데이터 수정=====");
list2.set(3, "AA"); // set(int index, Object obj)를 이용해 다른 객체로 변경 : [3]번자리 "A" -> "AA" 로 변경
print(list1, list2);
// list1에서 list2와 겹치는 부분만 남기고 나머지 삭제
System.out.println("======list1에서 list2와 겹치는 부분만 남기고 나머지 삭제======");
// retainAll()에 의해 list1에 변화가 있었으므로, true를 반환
System.out.println("list1.retainAll(list2) : " + list1.retainAll(list2));
System.out.println("list2와 공통요소 이외에는 list1의 원소가 모두 삭제됨.(변화가 있었음)");
print(list1, list2);
// list2에서 list1에 포함된 객체들 삭제
System.out.println("======list2에서 list1에 포함된 객체들 삭제======");
for(int i = list2.size()-1; i >= 0; i--) {
// i 는 list2의 사이즈(크기) -1 [마지막인덱스 표현] 부터 0까지 1씩 감소
if(list1.contains(list2.get(i))) //list2 원소 중, list1가 list2의 원소를 포함하고 있으면
list2.remove(i); //list2에서 해당 포함되는 원소 제거
}
print(list1, list2);
}
static void print(ArrayList list1, ArrayList list2) {
System.out.println("list1 " + list1);
System.out.println("list2 " + list2);
System.out.println();
}
}
* 위 소스를 분석하면 ArrayList의 기본적인 메서드를 이용해 객체를 다루는 방법을 보인다.
* ArrayList는 List인터페이스를 구현했기 때문에 저장된 순서를 유지한다.
* Collections클래스의 sort메서드를 이용해서 ArrayList에 저장된 객체들을 정렬한다.
[출력]
728x90
반응형
'Java' 카테고리의 다른 글
[Java] 연결 리스트(LinkedList) (0) | 2023.01.03 |
---|---|
[Java] 배열(Array) 구현 (0) | 2023.01.03 |
[JAVA] String, String Builder, String Text Block (0) | 2022.04.13 |
[JAVA] Collections Framework - Arrays (0) | 2022.04.01 |
[JAVA] Stack vs Queue (0) | 2022.03.29 |