JAVA 2. 컬렉션

김창민·2024년 7월 22일

BE

목록 보기
4/50
post-thumbnail

변수, 연산자, 조건문, 반복문, 배열.. 은 생략한다.

컬렉션

컬렉션은 참조형 변수를 저장하는 참조형 배열이라고 생각하면 된다.

참조형 변수?
기본형 -> 값을 직접 저장 (스택 영역, 정적)
참조형 -> 힙 영역(동적)에 저장된 값을 스택 영역에 저장된 메모리 주소를 통해 접근함

그래서 컬렉션을 사용할 때 int,char가 아닌 Integer,Character,String등을 사용하는 것이다.

컬렉션의 종류로는 List, Queue, Set, Map가 있다고 할 수 있고, 사실 Collection 인터페이스는 List,Queue,set 으로 분류되고 나머지 Map은 Collection 인터페이스를 상속하지는 않지만 그냥 Collection으로 분류한다.


List

순서가 있는 데이터의 집합, 중복도 허용

구현 클래스

ArrayList : 단방향 포인터 구조, 각 데이터에 대한 인덱스가 있어 조회 성능이 좋음
LinkedList : 양방향 포인터 구조, 데이터의 삽입, 삭제에 유리. 특히 스택, 큐, 양방향 큐 생성에 사용

사용 메서드

add,get,set,remove,clear

add(value), add(index, value)

  • List에 값을 추가할 때 사용된다.
ArrayList <Integer> int_list = new ArrayList <>(); 

int_list.add(1); // index=0에 1이 들어간 것. 
int_list.add(9); // index=1에 9가 들어간 것. 
int_list.add(0,123); // index=0에 123이 들어간 것. 기존에 있던 거는 삽입 index이후로 1씩 밀린다. 

get(index)

  • 해당 인덱스에 저장된 값을 특정한다.
ArrayList <Integer> int_list = new ArrayList <>(); 

int_list.add(1); // index=0에 1이 들어간 것. 
System.out.println(int_list.get(0)); // 1이 출력됨 

set(index, value)

  • 해당 index에 저장된 값을 수정한다.
ArrayList <Integer> int_list = new ArrayList <>(); 

int_list.add(1); // index=0에 1이 들어간 것. 
int_list.set(0,10);// set 수정 

System.out.println(int_list.get(0)); // 10이 출력됨 

remove(index)

  • 해당 index에 저장된 값을 삭제하고 뒤에 있는 값들의 index를 1씩 당긴다.
ArrayList <Integer> int_list = new ArrayList <>(); 

int_list.add(1); // index=0에 1이 들어간 것. 
int_list.add(9); // index=0에 1이 들어간 것. 
int_list.remove(0); 

System.out.println(int_list.get(0)); //9가 출력된다. 

clear()

  • 저장된 값을 전부 삭제한다.

Set

순서가 없는 데이터의 집합, 중복 미허용

  • 생성자 없는 인터페이스
  • Set은 생성자가 없어서 직접 new Set으로 생성할 수 없고 구현 클래스를 통해서 생성해야 한다.
  • 구현클래스
    HashSet : 접근 속도가 가장 빠르지만 순서 예측 불가능
    TreeSet : 정렬 방법 지정 가능

사용 메서드

add,remove,clear,contains

add(value)

  • 해당 값을 Set에 저장한다
Set <Integer> intS = new HashSet <>(); 
intS.add(4); 
intS.add(1); 
intS.add(1); //무시 
intS.add(2); 
intS.add(3); 
intS.add(3);// 무시 
for(Integer v:intS){ 
System.out.println(v); 
}//1,2,3,4 출력함 

remove(value)

  • 해당 값을 삭제한다.

clear()

  • 전체 값을 삭제한다.

contains(value)

  • 해당 값이 Set에 저장되어있는지 확인.
Set <Integer> intS = new HashSet <>(); 
intS.add(4); 
System.out.println(intS.contains(4)); //true 

Queue

List와 유사한 구조

  • 생성자 없는 인터페이스
  • Set과 동일
  • 구현클래스
    LinkedList :
    PriorityQueue : FIFO가 아닌 우선순위가 높은 순서대로 나가는 Queue

사용 메서드

add,poll,peek

add(value)

  • 가장 뒤에 value를 저장한다.
Queue <Integer> intQ = new LinkedList <>(); 
intQ.add(1); 
intQ.add(9); 

poll()

  • 가장 앞에 위치한 값을 꺼낸다. (꺼내고 삭제됨)
Queue <Integer> intQ = new LinkedList <>(); 
intQ.add(1); 
intQ.add(9); 

while(! intQ.isEmpty()){ 
int ret = intQ.poll(); // 1, 9 순으로 ret에 저장됨 
System.out.println(ret); // 1, 9 순으로 출력됨 
} 

peek()

  • 가장 앞에 위치한 값을 참고만 한다. (꺼내고 삭제 안 하는 거임)
Queue <Integer> intQ = new LinkedList <>(); 
intQ.add(1); 
intQ.add(9); 

while(! intQ.isEmpty()){ // 무한 루프임 
int ret = intQ.peek(); // 1만 ret에 저장됨 
System.out.println(ret); // 1만 출력됨 

Map

key:value 쌍으로 이뤄진 집합. key의 중복을 허용하지 않음.

  • 생성자 없는 인터페이스
  • Set과 동일
  • 구현클래스
    Hashtable : HashMap보다 느리지만 동기화 지원, null 불가
    HashMap : 중복 미허용, 순서 미지정, null가능
    TreeMap : 정렬된 순서대로 KeyValue를 저장하여 검색이 빠름

사용 메서드

put,get,ketSet,values,remove,clear...

put(key, value)

Map <String, Integer> intMap = new HashMap <>(); 

intMap.put("일",1); 
intMap.put("월",2); 
intMap.put("화",3); 
intMap.put("월",4); //덮어쓰기 

get(key)

  • 해당 키에 저장된 값을 반환함
Map <String, Integer> intMap = new HashMap <>(); 

intMap.put("일",1); 
intMap.put("월",2); 
intMap.put("화",3); 
intMap.put("월",4); 

System.out.println(intMap.get("월"));//4 출력 

ketSet()

  • Map에 저장된 모든 키를 포함한 Set를 반환함
  • 해당 Set을 수정하면 Map의 내용도 변경됨
Map <String, Integer> intMap = new HashMap <>(); 

intMap.put("일",1); 
intMap.put("월",2); 
intMap.put("화",3); 
intMap.put("월",4); 
for(String key : intMap.keySet()){ 
System.out.println(key); //월 화 일 출력함 

values()

  • Map에 저장된 모든 값을 Collection 형태로 반환함
Map <String, Integer> intMap = new HashMap <>(); 

intMap.put("일",1); 
intMap.put("월",2); 
intMap.put("화",3); 
intMap.put("월",4); 
for(Integer key : intMap.values()){ 
System.out.println(key);//4,3,1, 출력함 
profile
일일 회고 : https://rlackdals981010.github.io/

0개의 댓글