컬렉션
여러 객체(데이터)를 모아 놓은 것을 의미
프레임웍
- 표준화, 정형화된 체계적인 프로그래밍 방식
컬렉션 프레임웍의 핵심 인터페이스
- List : 순서 o, 중복o
- Set : 순서 x, 중복x
- Map : 순서 x, 키 중복 x, 값 중복 o , 키 + 밸류 (set이랑 비슷)
*순서 , 집합 , Dictionary *
List인터페이스의 메서드
LinkedList - 기차처럼 연결되어 있음 , 유연함
Set인터페이스
HashSEt이나 TreeSet 두 개중에 하나 선택
Map인터페이스
put(add)
ArrayList
예제 1
import java.util.*;
class ArrayListEx1 {
public static void main(String[] args) {
ArrayList list1 = new ArrayList(10);
// ArrayList에는 객체만 저장가능
// autoboxing에 의해 기본형 -> 참조형
list1.add(new Integer(5));
list1.add(new Integer(4));
list1.add(new Integer(2));
list1.add(new Integer(0));
list1.add(new Integer(1));
list1.add(new Integer(3));
//list1의 1인덱스~3인덱스 복사
//subList로 만들어지는 리스트는 읽기 전용
ArrayList list2 = new ArrayList(list1.subList(1,4));
print(list1, list2);
//배열 정렬
Collections.sort(list1);
Collections.sort(list2);
print(list1, list2);
System.out.println("list1.containsAll(list2) :" + list1.containsAll(list2));
list2.add("B");
list2.add("C");
//인덱스3에 추가하고 "AA"로 변경
list2.add(3,"A");
list2.set(3, "AA");
print(list1, list2);
//list1에서 list2와 겹치는 부분만 남기고 나머지 삭제
System.out.println("list1.retainAll(list2) :" + list1.retainAll(list2));
print(list1, list2);
//list2에서 list1에 포함된 부분 삭제
for(int i = list2.size() -1;i>=0;i--) {
if(list1.contains(list2.get(i))){
list2.remove(i);
}
}
print(list1, list2);
}
static void print(ArrayList list1, ArrayList list2) {
System.out.println("list1: " + list1);
System.out.println("list2: " + list2);
System.out.println();
}
}
list1: [5, 4, 2, 0, 1, 3]
list2: [4, 2, 0]
list1: [0, 1, 2, 3, 4, 5]
list2: [0, 2, 4]
list1.containsAll(list2) :true
list1: [0, 1, 2, 3, 4, 5]
list2: [0, 2, 4, AA, B, C]
list1.retainAll(list2) :true
list1: [0, 2, 4]
list2: [0, 2, 4, AA, B, C]
list1: [0, 2, 4]
list2: [AA, B, C]
예제2
import java.util.*;
class ArrayListEx2 {
public static void main(String[] args) {
final int LIMIT = 10; //자르고자 하는 글자의 개수;
String source = "0123456789abcdefghijABCDEFGHIJ!@#$%^&*()ZZZ";
int length = source.length();
List list = new ArrayList(length/LIMIT + 10);//크기를 약간 여유있게 잡음
for(int i = 0; i<length; i+=LIMIT) {
if(i+LIMIT < length) {
list.add(source.substring(i, i+LIMIT));
}
else {
list.add(source.substring(i));
}
}
for(int i = 0; i<list.size(); i++) {
System.out.println(list.get(i));
}
}
}
0123456789
abcdefghij
ABCDEFGHIJ
!@#$%^&*()
ZZZ
예제3
import java.util.*;
class VectorEx1 {
public static void main(String[] args) {
Vector v = new Vector(5);
v.add("1");
v.add("2");
v.add("3");
print(v);
v.trimToSize(); //빈 공간 제거 (용량과 크기가 같아짐)
System.out.println("====After trimToSize() ====");
print(v);
v.ensureCapacity(6); //용량 6으로 늘림
System.out.println("====After ensureCapacity() ====");
print(v);
v.setSize(7); //용량 6으로 늘림
System.out.println("====After setSize() ====");
print(v);
v.clear();
System.out.println("====After clear() ====");
print(v);
}
static void print(Vector v) {
System.out.println(v);
System.out.println("size : "+v.size());
System.out.println("capacity : " +v.capacity());
}
}
[1, 2, 3]
size : 3
capacity : 5
====After trimToSize() ====
[1, 2, 3]
size : 3
capacity : 3
====After ensureCapacity() ====
[1, 2, 3]
size : 3
capacity : 6
====After setSize() ====
[1, 2, 3, null, null, null, null]
size : 7
capacity : 12
====After clear() ====
[]
size : 0
capacity : 12
trimToSize()
-> 빈 공간 제거해서 용량과 크기가 같아짐ensureCapacity(6)
-> 크기가 6인 배열을 생성해서 복사! (새로운 인스턴스가 생성되는 것임)setSize(7)
-> v의 capacity가 7보다 작아서 자동적으로 기존 크기의 2배의 크기로 증가하게 돼서 12가 됨clear()
-> v의 모든 요소 삭제 , clear후 trimTosize()를 하게 되면 빈 배열이 됨
ArrayList 삭제 과정
- 이동, 2) null저장 , 3) 사이드 수정
삭제하는 데이터가 마지막 요소가 아닐 때
- 삭제할 데이터 뒤의 요소들을 복사함
- 삭제한 데이터 자리로 복사한 데이터로 덮어씀
- 마지막 데이터 null로 저장
- size값 1감소
LinkedList
배열과 달리 불연속적으로 존재하는 데이터 연결
노드 : 링크드 리스트의 각 요소를 노드라고 함
class Node {
Node next; //다음 노드
Object obj; //데이터
}
- 데이터 삭제 : 한 번의 참조변경만으로 가능
- 데이터 추가 : 한 번의 Node 객체 생성과 두 번의 참조변경으로 가능
더블리 링크드 리스트 (doubly linked list)
이중 연결리스트, 접근성 향상 -> 앞 뒤로 접근 가능하지만 어쨋든 다 거쳐서 접근해야됨
class Node {
Node next; //다음 노드
Node previous; //이전 노드
Object obj; //데이터
}
더블리 써큘러 링크드 리스트 (doubly circular linked list)
이중 원형 연결리스트
class Node {
Node next; //다음 노드
Node previous; //이전 노드
Object obj; //데이터
}
ArayList vs LinkedList
'java > 컬렉션 프레임웍' 카테고리의 다른 글
Comparator와 Comparable (0) | 2025.04.21 |
---|---|
Map (0) | 2025.04.17 |
Set (1) | 2025.04.17 |
Iterator, ListIterator, Enumeration (0) | 2025.04.17 |