본문 바로가기
JAVA

[JAVA] 컬렉션 - ArrayList

by Amy IT 2022. 6. 2.

List 계열의 컬렉션 클래스는 저장되는 순서가 있기 때문에 데이터 중복 저장이 가능합니다. 저장된 위치값을 사용할 수 있기 때문에 특정 값만 검색하거나 특정 값을 수정하거나 중간에 값을 삽입하는 등의 작업이 모두 가능합니다. 

 

 

▶ List 인터페이스 메소드

 

Collection 인터페이스의 주요 메소드를 공통적으로 사용할 수 있습니다. 

 

메소드 설명
boolean add(Object o)
boolean addAll(Collection c)
지정된 객체 또는 Collection의 객체들을 Collection에 추가
void clear() Collection의 모든 객체를 삭제
boolean isEmpty() Collection이 비어있는지 확인
int size() Collection에 저장된 객체의 개수
Object [] toArray() Collection에 저장된 객체를 배열로 변환
boolean contains(Object o) Collection에 o 요소를 포함하고 있는지 반환
Iterator<E> iterator() Collection에 저장된 데이터를 반복출력하기 위한 Iterator 인터페이스 반환
boolean remove(Object o)
boolean removeAll(Collection c)
지정된 객체 또는 Collection에 포함된 객체들을 삭제

 

Collection 인터페이스의 공통적인 메소드 외에 List 인터페이스에 정의된 메소드들은 다음과 같습니다.

 

메소드 설명
void add(int index, Object element)
boolean addAll(int index, Collection c)
지정된 위치에 객체 또는 컬렉션에 포함된 객체들을 추가
Object get(int index) 지정된 위치에 있는 객체를 반환
int indexOf(Object o) 지정된 객체의 위치를 반환
(List의 첫 번째 요소부터 순방향으로 찾는다.)
int lastIndexOf(Object o) 지정된 객체의 위치를 반환
(List의 마지막 요소부터 역방향으로 찾는다.)
Object remove(int index) 지정된 위치에 있는 객체를 삭제하고 삭제된 객체를 반환
Object set(int index, Object element) 지정된 위치에 객체를 저장
List subList(int fromIndex, int toIndex) 지정된 범위에 있는 객체를 List로 만들어 반환

 

 

 

▶ ArrayList

 

(1) ArrayList 생성 및 데이터 추가

String 타입의 제네릭을 사용하여 ArrayList를 생성하고 데이터를 추가해 보겠습니다. 

ArrayList<String> list = new ArrayList<>(); 
list.add("홍길동");
list.add("이순신");
list.add("유관순");
list.add("강감찬");
list.add("세종");
list.add("세종"); //중복 가능 
//list.add(100); //불가 
System.out.println(list); //[홍길동, 이순신, 유관순, 강감찬, 세종, 세종]

 

Arrays 클래스의 asList() 메소드를 사용하여 나열한 데이터들을 ArrayList에 담아서 List 타입으로 반환받는 방법도 있습니다.

List<String> list2 = Arrays.asList("홍길동","이순신","세종","세종");

 

(2) ArrayList 메소드 활용

다음과 같이 Collection 인터페이스의 공통된 메소드를 포함한 다양한 메소드를 활용하여 데이터를 조회하고 조작할 수 있습니다. 

System.out.println(list.get(0)); //홍길동
System.out.println(list.get(1)); //이순신
System.out.println("길이(크기): "+list.size()); //6
System.out.println("값 포함여부: "+list.contains("세종")); //true
System.out.println("특정값 위치: "+list.indexOf("세종")); //4
System.out.println("데이터 존재 여부: "+list.isEmpty()); //false
List<String> sub = list.subList(0, 3); //시작번호~끝번호-1 까지 뽑아서 list로 리턴
System.out.println("subList: "+sub); //[홍길동, 이순신, 유관순]
list.add(0, "정조"); //중간삽입 (insert)
System.out.println(list); //[정조, 홍길동, 이순신, 유관순, 강감찬, 세종, 세종]
list.set(0, "영조"); //수정 (update)
System.out.println(list); //[영조, 홍길동, 이순신, 유관순, 강감찬, 세종, 세종]
list.remove(0); //삭제(delete) 인덱스값 지정 가능 
System.out.println(list); //[홍길동, 이순신, 유관순, 강감찬, 세종, 세종]
list.remove("세종"); //삭제(delete) 데이터 지정 가능 
System.out.println(list); //[홍길동, 이순신, 유관순, 강감찬, 세종]

 

(3) 데이터 순회

for문, for-each문, Iterator 세 가지 방법으로 데이터 전체 순회를 할 수 있습니다.

//(1)for문
for (int i = 0; i < list.size(); i++) {
	System.out.println(list.get(i));
}
//(2)for-each문
for (String s : list) {
	System.out.println(s);
}
Object [] obj = list.toArray(); //Object배열로 변환 가능
for (Object x : obj) {
	System.out.println(x);
}
//(3)Iterator
Iterator<String> it = list.iterator();
while (it.hasNext()) {
	String s = it.next();
	System.out.println(s);
}

 

 

 

▶ ArrayList 정렬

 

(1) Collections.sort() / Collections.reverse() 

Collections 클래스의 sort(), reverse() 메소드를 이용하면 List에 담긴 데이터들을 오름차순/내림차순 정렬할 수 있습니다.

ArrayList<Integer> list = new ArrayList<>();
list.add(9);
list.add(6);
list.add(1);
list.add(3);
list.add(4);
//오름차순 정렬
System.out.println("정렬전: "+list); //[9, 6, 1, 3, 4]
Collections.sort(list);
System.out.println("정렬후: "+list); //[1, 3, 4, 6, 9]
//내림차순 정렬
System.out.println("정렬전: "+list); //[1, 3, 4, 6, 9]
Collections.reverse(list);
System.out.println("정렬후: "+list); //[9, 6, 4, 3, 1]

 

(2) Comparator

Comparator 인터페이스를 구현하는 클래스를 선언하여 정렬 기준을 직접 지정할 수 있습니다. 예를 들어 이름, 나이, 주소를 인스턴스 변수로 갖는 Person 객체를 생성하고 ArrayList에 넣어주었을 때, 나이를 기준으로 오름차순/내림차순 정렬을 한다면 다음과 같이 작성할 수 있습니다. 

class Person {
	private String name;
	private int age; 
	private String address;
	public Person(String name, int age, String address) {
		this.name = name;
		this.age = age;
		this.address = address;
	}
	public int getAge() {
		return age;
	}
	@Override
	public String toString() {
		return name + " " + age;
	}
}
class PersonAgeSortComparator
implements Comparator<Person> {
	@Override
	public int compare(Person p1, Person p2) {
		if (p1.getAge() > p2.getAge()) {
			return 1; //내림차순은 -1
		} else if (p1.getAge() < p2.getAge()) {
			return -1; //내림차순은 1
		} 
		return 0;
	}
}
public class ComparatorTest {
	public static void main(String[] args) {
		ArrayList<Person> list2 = new ArrayList<>();
		list2.add(new Person("홍길동", 20, "서울"));
		list2.add(new Person("이순신", 44, "경기"));
		list2.add(new Person("강감찬", 33, "전라"));
		System.out.println("정렬전: "+list2); //[홍길동 20, 이순신 44, 강감찬 33]
		Collections.sort(list2, new PersonAgeSortComparator());
		System.out.println("정렬후: "+list2); //[홍길동 20, 강감찬 33, 이순신 44]
	}
}

 

 

이상으로 List 계열의 컬렉션 클래스인 ArrayList의 기본적인 사용법에 대해 알아보았습니다.

 

 

 

댓글