버글버글
Java 수업 기록 (16) Collection Framework - ArrayList 본문
▶ 컬렉션 프레임워크(Collection Framework)
1. 여러 데이터를 쉽고 효과적으로 처리할 수 있도록 제공하는 클래스
2. 자료 구조(Data Structure)와 알고리즘(Algorithm)을 구조화한 클래스
3. 자바 인터페이스(Interface)를 구현한 형태로 작성된 클래스
* 주요 컬렉션 프레임워크 인터페이스
List 인터페이스 | Set 인터페이스 | Map 인터페이스 |
1. 목록 관리 2. 순서 있는 목록 3. 배열 대신 사용 4. 요소 추가/삭제/수정 5. 요소의 중복 저장 가능 |
add() 1. 집합 관리 2. 순서 없는 목록 3. 교집합/합집합/차집합 등 4. 요소 추가/삭제/수정 5. 요소의 중복 저장 불가능 |
put() 1. 데이터를 쌍으로 관리 2. key : 데이터 식별 수단 3. Value : 데이터 4. 요소 추가/삭제/수정 5. Key는 중복 저장 불가능 Value는 중복 저장 가능 |
list와 set은 collection의 자식이다.
생성 방법 |
ArrayList list = new ArrayList(); Lits lits = new ArrayList(); // 업캐스팅 |
▶ ArrayList 인터페이스
1. 제네릭(Generic) 기반
- 어떤 컬렉션 프레임워크를 생성할 떄 어떤 타입을 저장할 것인지 구체적으로 명시하는것
- 제네릭으로 지정 가능한 타입은 오직 참조 타입(Reference Type)만 가능
- 기본 타입(Primitive Type)을 저장하려면 Wrapper Class 타입으로 처리
2. 생성할 때 데이터타입을 결정(구체화)
import java. util.List;
3. 배열(Array)을 리스트로 구현한 클래스
4. 배열보다 쉬운 사용법을 제공
ArrayList 주요기능 |
리스트 길이 자동 세팅 |
요소의 추가/수정/삭제 |
인덱스 기반의 접근 |
특정 요소 조회 |
리스트와 배열의 상호 변환 |
*ArrayList 주요 메소드
메소드 | 역할 |
boolean add(E element) | 마지막에 element 추가. 성공하면 true 반환 |
void add(int index, E element) | index 위치에 element 추가 |
boolean addAll(Collectrion < ? extends E> c) | 마지막 컬렉션 c의 모든 요소 추가. 성공하면 true 반환 |
void clear() | 모든 요소 제거 |
boolean contains(Object o) | 객체 o를 포함하고 있으면 true 반환 |
E get(int index) | index 위치의 요소 반환 |
E set(int index, E element) | index 위치의 기존 요소를 element로 변경. 변경된 요소 반환 |
boolean isEmplty() | 비어 있으면 true 반환 |
E remove(int index) | index 위치의 element 제거. 제거된 요소 반환 |
boolean remove(Object o) | 객체 o 와 동일한 요소 제고. 성공하면 true 반환 |
int size() | 요소들의 개수 반환 |
Object[] toArray() | 리스트의 모든 요소들을 포함하는 Object 타입의 배열 반환 |
* 생성
List<String> list = new ArrayList<String>();
* 요소 추가
1. 인덱스 지정이 없으면 순서대로 저장
2. 인덱스 지정도 가능
list.add("월"); // 인덱스 값 미지정 // 인덱스 : 1
list.add("화"); // 인덱스 값 미지정 // 인덱스 : 2
list.add(0, "일"); // 인덱스 값 지정 // 인덱스 : 0
* 요소 제거
1. boolean remove(Object obj) : obj 제거. 성공하면 true 반환
2. Object remove(int index) : index 위치의 요소 제거. 제거한 요소를 반환
boolean result = list.remove("일");
* 요소 수정
1. 객체.set(index, String)
list.set(0, "일"); // 0번 인덱스를 화요일 > 일요일로 수정
* 리스트의 초기화
1. 배열을 리스트로 변환하는 과정
List<String> list = Arrays.asList("일", "월", "화", "목");
*리스트의 길이
List<String> list = Arrays.asList("일", "월", "화", "목");
int size = list.size();
System.out.println(size); // 4
* 개별 요소
List<String> list = Arrays.asList("일", "월", "화", "목");
String element1 = list.get(0);
String element2 = list.get(1);
String element3 = list.get(2);
String element4 = list.get(3);
System.out.println(element1); // 일
System.out.println(element2); // 월
System.out.println(element3); // 화
System.out.println(element4); // 목
* for 문 순회
List<String> list = Arrays.asList("일", "월", "화", "목");
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// 일 월 화 목
* 위와 같은 코드는 list.size(); 라는 메소드가 4번이나 출력 되기 때문에, 성능이 저하된다.
따라서 아래와 같은 코드로 보완이 가능하다.
List<String> list = Arrays.asList("일", "월", "화", "목");
for(int i = 0, length = list.size(); i < length; i++) {
System.out.println(length);
}
- 향상 for문
List<String> list = Arrays.asList("일", "월", "화", "목");
for(String element : list) {
System.out.println(element);
}
▶ Wrapper 클래스
1. 자바의 기본 타입(Primitive Type)을 클래스화한 8개의 클래스
2. 기본 타입은 값만 저장할 수 있으나 Wrapper 클래스는 기본 타입의 값과 기능을 제공
3. 기본 타입을 참조 타입(Reference Type)으로 변경할 때 사용
기본타입 | boolean | char | byte | short | int | long | float | double |
Wrapper | Boolean | Character | Byte | Short | Interger | Long | Float | Double |
List<Integer> list = new ArrayList<Integer>();
list.add(1); // 정수 저장.
list.add(2);
list.add(3);
System.out.println(list); // [1, 2, 3]
* 비어 있는 리스트 인가?
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
boolean result = list.isEmpty();
System.out.println(result); // false
* 특정 요소를 포함하고 있는가?
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
if(list.contains(4)) {
System.out.println("4를 포함한다.");
} else {
System.out.println("4를 포함하지 않는다.");
}
// 4를 포함하지 않는다.
▶ 기타사항
* 마침표 3개(...)은 갯수가 정해지지 않은 것이다.
List<String> list = Arrays.
위 코드에서 Arrays. ctrl + space bar 하면 asList(T... a) 가 보일텐데, String이 몇개가 와도 상관 없다는 말이다.
* 객체끼리의 비교는 equals()를 사용해야 한다.
- 객체의 비교가 필요할 때는 equals를 override를 사용해 줘야 한다.
'java > java 수업 기록' 카테고리의 다른 글
Java 수업 기록 (18) Collection Framework - Hash (0) | 2022.08.10 |
---|---|
Java 수업 기록 (17) Collection Framework - Set (0) | 2022.08.09 |
Java 수업 기록 (15) Exception (0) | 2022.08.07 |
Java 수업 기록 (14) 상속-Interface (0) | 2022.08.05 |
Java 수업 기록 (13) 라이브러리 - Bean (0) | 2022.08.04 |