컬렉션 프레임 워크란?
: 자료구조를 사용해서 객체들을 효율적으로 관리할 수 있도록 인터페이스와 구현 클래스를 java.util 패키지에서
제공하는 것을 총 칭하는 말
java.util 패키지에 포함
인터페이스를 통해 다양한 컬렉션 클래스 이용
- 컬렉션 : 객체의 저장
- 프레임워크 : 사용 방법을 정해 놓은 라이브러리
기능 | 메서드 | 설명 |
요소 추가 | boolean add(E element) | 리스트의 끝에 요소(element) 추가 |
void add(int index, E element) | 주어진 위치(index)에 요소(element) 삽입 | |
set(int index, E element) | 주어진 인덱스의 개체를 새로운 객체로 바꿈 | |
요소 검색 | E get(int index) | 지정된 위치(index)에 있는 요소를 반환 |
boolean Contains(Object o) | 주어진 객체가 저장되어 있는지 여부 | |
isEmpty( ) | 컬렉션이 비어있는지 조사 | |
int size( ) | 저장되어 있는 전체 객체 수를 리턴 | |
요소 삭제 | E remove(int index) | 주어진 위치(index)에 있는 요소를 삭제하고, 삭제된 요소를 반환 |
boolean remove(Object o) | 주어진 객체를 리스트에서 삭제 | |
void clear( ) | 저장된 모든 객체를 삭제 |
List 컬렉션
: 객체를 인덱스로 관리, 저장 용량이 자동으로 증가하며 객체 저장 시 자동 인덱스가 부여
추가, 삭제, 검색을 위한 다양한 메서드 제공
객체 자체를 저장하는 것이 아닌 객체 주소 참조
객체의 순서를 유지하여 저장, 중복 저장 가능
1. ArrayList
: 저장 용량을 초과한 객체들이 들어오면 자동적으로 늘어남. 고정도 가능.
객체 제거 : 제거된 객체 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 앞당겨 짐
** 배열의 문제점 : 저장할 수 있는 객체 수가 배열을 생성할 때 결정, 객체 삭제했을 때 인덱스가 비게 됨
( 객체를 저장하려면 어디가 비어있는지 확인해야 함 )
import java.util.ArrayList;
import java.util.List;
import javax.management.openmbean.ArrayType;
public class ArrayList01 {
public static void main(String[] args) {
// ArrayList<>
// <제네릭> -> 자료형이 무엇이 들어올지 모른다. 사용할 때 자료형을 넣는다
// 개수를 지정하지 않으면 기본 10개
// 개수 지정 가능
ArrayList<String> List = new ArrayList<>(15);
// 부모형으로 변환하여 사용
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Oracle");
list.add("HTML5");
list.add("JSP");
int size = list.size();
System.out.println("총 객체 수 : " + size);
String list_21 = list.get(2);
System.out.println(list_21);
// add : 삽입
list.add(2, "Spring");
System.out.println("총 객체 수 : " + list.size());
System.out.println(list.get(2));
// set : 대체 ( 기존 객체 변경 )
list.set(2, "SringBoot");
System.out.println("총 객체 수 : " + list.size());
System.out.println(list.get(2));
System.out.println("-----------");
for(int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("-----------");
// 삭제 remove(index), remove(객체명)
String removeStr = list.remove(0);
System.out.println(removeStr);
System.out.println();
for(int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println();
boolean re = list.remove("HTML5");
System.out.println(re);
list.clear();
System.out.println("총 객체 수 : " + list.size());
System.out.println("ArrayList가 비어있는가? " + list.isEmpty());
// 매개변수에 모든 객체를 받을 때 <Object>
ArrayList alist2 = new ArrayList();
alist2.add(1);
alist2.add(3.1415);
alist2.add("56");
alist2.add(new String("88"));
Object obj1 = alist2.get(0);
int num = (int)obj1;
double douNum = (double)alist2.get(1);
int strNum1 = Integer.parseInt((String)alist2.get(2));
int strNum2 = Integer.parseInt((String)alist2.get(3));
System.out.println(num + douNum + strNum1 + strNum2);
}
}
출력결과
2. Vector
: 사용은 ArrayList와 동일
동기화 된 메서드로 구성되어 있어, 멀티 스레드가 동시에 Vector( ) 메서드를 실행할 수 없음
import java.util.Vector;
public class Vector02 {
public static void main(String[] args) {
Vector<String> vlist = new Vector<>();
vlist.add("Vector");
vlist.add("ArrayList");
vlist.remove(0);
vlist.remove("ArrayList");
}
}
3. LinkedList
: ArrayList와 사용 방법은 동일하나 내부 구조는 다름
인접 참조를 링크해서 체인처럼 관리 ( 이중 연결 리스트(doubly linked list) 로 구현 )
각 요소가 이전 요소와 다음 요소에 대한 참조를 가지고 있는 자료 구조
LinkedList 클래스는 List 인터페이스를 구현하며, 순서가 있는 요소를 저장하고 관리함
- 맨 앞(Head): 리스트의 첫 번째 요소, 즉 가장 앞쪽에 위치한 요소로 이 요소는 리스트의 시작 지점을 가리키며, getFirst() 메서드로 접근
- 맨 뒤(Tail): 리스트의 마지막 요소, 즉 가장 뒤쪽에 위치한 요소로 이 요소는 리스트의 끝 지점을 가리키며, getLast() 메서드로 접근
import java.util.Iterator;
import java.util.LinkedList;
public class LinkedList03 {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(3); // 맨 끝에 추가
list.add(1, 5); // index 1번에 추가
list.addFirst(1); // 맨 앞에 추가
list.add(7);
for (int i : list)
System.out.println(i);
System.out.println("------------");
list.remove(); // 맨 앞 노드 삭제
for (int i : list)
System.out.println(i);
list.remove(1);
list.removeLast(); // 맨 끝 노드 삭제
//list.remove(list.size() -1); // 맨 끝 노드 삭제
System.out.println("------------");
list.add(5);
list.add(7);
list.add(9);
list.add(11);
// Iterator는 컬렉션을 순회하고 접근하는데 사용되는 인터페이스
Iterator<Integer> it = list.iterator();
// hesNext() => 남아있는 객체가 있는가 ? 남아있는게 있으면 true 반환, 없으면 false 반환
// next() => 순회하면서 값 얻어오기
while(it.hasNext()) {
int num = it.next();
System.out.println(num);
}
}
}
'Java' 카테고리의 다른 글
Java 문법) 컬렉션 프레임워크 - Map 컬렉션 (0) | 2023.11.03 |
---|---|
Java 문법) 컬렉션 프레임워크 - Set 컬렉션 (0) | 2023.11.03 |
Java 문법 ) Object클래스 - getClass (0) | 2023.11.02 |
Java 문법 ) Object클래스 - clone (0) | 2023.11.02 |
Java 문법) Object클래스 - toString (0) | 2023.11.02 |