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의 기본적인 사용법에 대해 알아보았습니다.
'JAVA' 카테고리의 다른 글
[JAVA] JDBC 기본 개념과 프로그래밍 단계 (0) | 2022.06.06 |
---|---|
[JAVA] 컬렉션 - Map 계열 (0) | 2022.06.04 |
[JAVA] 컬렉션 - Set 계열 (0) | 2022.06.01 |
[JAVA] 컬렉션 프레임워크 (Collections Framework) (0) | 2022.06.01 |
[JAVA] 예외 발생시키기, 사용자 정의 예외 클래스 (0) | 2022.06.01 |
댓글