List 인터페이스
특징
- 순서가 있는 집합
- 인덱스로 관리
- 중복하여 객체 저장 가능
구현 클래스
- ArrayList
- LinkedList
- Vector
주요 메서드
- add() / get() / isEmpty() / size() / remove() / clear()
ArrayList
- List 인터페이스의 구현 클래스
- 크기가 가변적으로 변하는 선형리스트
- 배열과 유사 (순차리스트, 인덱스 사용)
ArrayList와 배열의 차이점
- 배열은 크기가 고정되어 있음
- ArrayList는 객체 추가 가능 존재 -> 크기가 가변적으로 변함 (저장 용량 초과 시 자동으로 저장 용량 증가)
ArrayList의 단점
- 데이터를 읽어오고 저장하는데 효율적
- 용량을 변경해야 할 때는 새로운 배열을 생성 후 기존 배열로부터 새로운 배열로 복사 -> 상당히 비효율적
- 처음에 인스턴스 생성할 때 저장할 데이터의 개수를 잘 고려하여 충분한 용량의 인스턴스를 생성하는 것이 좋음
ArrayList 사용법
(1) 제네릭을 사용하지 않을 경우
List list = new ArrayList();
list.add(“abc”);
String str = (String)list.get(0);
-> 강제 타입 변환 필요
(2) 제네릭을 사용하는 경우
List<String> list = new ArrayList<String>();
-> 강제 타입 변환 안 해도 됨
ArrayList의 객체 추가/제거
객체 추가
: 인덱스 0부터 차례로 저장
객체 제거
: 제거하고자 하는 바로 뒤 인덱스부터 마지막 인덱스까지의 값을 모두 앞으로 1씩 이동
: 빈번한 객체 삭제와 삽입이 일어나는 경우 ArrayList를 사용하는 것이 바람직하지 않음 -> LinkedList 사용 권장
활용 예제 - 1
package list;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
// 제네릭 타입이 아닌 경우
public class ArrayListEx01 {
public static void main(String[] args) {
List list = new ArrayList(5);
list.add(100);
list.add(2.55);
list.add(300);
list.add(9.9);
list.add("자바 프로그래밍");
list.add(1, "데이터베이스"); // 위치 지정하여 값 추가
System.out.println("리스트 내용 출력");
for(int i=0; i<list.size(); i++) {
System.out.println(i + ":" + list.get(i));
}
// 포함 여부 확인
System.out.println("\n포함 여부 확인");
System.out.println(list.contains(300)); //true
System.out.println(list.contains("자바")); //false
// 특정 위치의 요소 삭제
System.out.println("\n리스트에서 데이터 삭제");
System.out.println(list.remove(1));
System.out.println(list.remove("자바 프로그래밍"));
System.out.println("\n리스트 내용 출력");
for(int i=0; i<list.size(); i++) {
System.out.println(i + ":" + list.get(i));
}
}
}
활용 예제 - 2
package list;
import java.util.ArrayList;
import java.util.List;
public class ArrayListEx02 {
public static void main(String[] args) {
// 제네릭 String 타입
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("JDBC");
list.add("Servelt/JSP");
list.add("대한민국 만세");
System.out.println("\n전체 내용 출력");
for (int i=0; i<list.size(); i++) {
System.out.println(i + " : " + list.get(i));
}
System.out.println("\n전체 내용 출력2");
for (String item : list) {
System.out.println(item);
}
// 세 번째 요소와 요소의 길이 출력
System.out.println("\n세 번째 요소 : " + list.get(2));
System.out.println("\n세 번째 요소 길이 : " + list.get(2).length()); // 글자 수
// 네 번째 요소와 요소의 길이 출력
System.out.println("\n네 번째 요소 : " + list.get(3));
System.out.println("\n네 번째 요소 길이 : " + list.get(3).length()); // 글자 수
// 특정 위치에 삽입
list.add(2, "Database");
// 총 객체 수 출력
System.out.println("\n총 객체 수 : " + list.size());
// 전체 내용 출럭3
System.out.println("\n전체 내용 출력3");
for (String item : list) {
System.out.println(item);
}
// 특정 요소 제거
list.remove("JDBC");
// 특정 요소 포함 여부
System.out.println("\nJava 포함 여부 : " + list.contains("Java"));
}
}
활용 예제 - 3
package list;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ArrayListEx03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<String> lst = new ArrayList<String>(4);
for (int i=0; i<4; i++) {
String str = sc.nextLine();
lst.add(str);
}
String maxVal = null;
int maxLen = lst.get(0).length();
for (int i=0; i<lst.size(); i++) {
if(lst.get(i).length() > maxLen) {
maxLen = lst.get(i).length();
maxVal = lst.get(i);
}
}
System.out.println("단어 리스트 : " + lst);
System.out.println("가장 긴 단어 : " + maxLen);
System.out.println("가장 긴 단어의 길이 : " + maxVal);
}
}
활용 예제 - 4
package list;
import java.util.ArrayList;
public class ArrayListEmployeeMain {
public static void main(String[] args) {
ArrayList<Employee> lst = new ArrayList<Employee>(5);
Employee e1 = new Employee(100, "김사원", 3000.55);
Employee e2 = new Employee(101, "박대리", 4000.55);
Employee e3 = new Employee(102, "최과장", 5000.55);
lst.add(e1);
lst.add(e2);
lst.add(e3);
System.out.println(lst.size()); // 3
// 출력하는 다양한 방법
System.out.println(lst);
System.out.println();
for (int i=0; i<lst.size(); i++) {
Employee emp = lst.get(i);
System.out.println(emp);
}
System.out.println();
for (int i=0; i<lst.size(); i++) {
System.out.println(lst.get(i));
}
}
}
'Algorithm > 자료구조' 카테고리의 다른 글
이진 트리 (0) | 2021.11.30 |
---|---|
Vector (0) | 2021.11.30 |
순차 리스트 ( 배열 / 행렬 / 레코드 / 스택 / 큐 / 데크 ) (0) | 2021.11.29 |
리스트 (선형 리스트 / 단일 연결 리스트) (0) | 2021.11.29 |
이진 탐색 트리 (Binary Search Tree) (0) | 2021.11.26 |