일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- angular
- 타입스크립트
- 으
- 0.25px border
- Websocket
- ES5
- jwt
- npm
- font-size
- 10px
- 데이터베이스 #try #이중
- 서버리스 #
- 0.5px border
- 0.75px border
- 컴포넌튼
- entity
- ZOOM
- es6
- literal
- 1px border
- TS
- TypeScript
- &연산
- 전역변수
- 클론코딩
- Props
- github
- 당근마켓
- 문서번호
- Strict
- Today
- Total
복잡한뇌구조마냥
[JAVA] 컬렉션 프레임워크 ( 자료구조, Set, List, Map ) 본문
컬렉션 프레임워크
- java.util 패키지에는 자료를 다룰 수 있는 자료구조 클래스가 다수 존재함.
- 자료구조 클래스를 컬렉션 프레임워크라고 함.
자료구조
- 자료를 저장할 수 있는 구조
<interface> Collection |
+ add(Object) : boolean + interator() : interator + size() : int |
- 기본이 되는 interface는 Collection
- 중복도 허용하고, 자료가 저장된 순서도 기억하지 못함.
- 저장된 자료를 하나씩 꺼낼 수 있는 Interator 라는 인터페이스를 반환
<interface> Iterator |
+ hashNext(): boolean + next() : Object |
- Collection이 순서 등 기능을 위해 의존함
- 꺼낼 것이 있는지 살펴보는 hasNext() 메소드
- 하나씩 자료를 꺼낼때 사용하는 next() 메소드
<interface> Set |
+ add(Object) : boolean |
- 중복을 허용하지 않는 인터페이스
- Collection Interface를 상속
- add 메소드는 같은 자료가 있으면 false, 없으면 true를 반환
HashSet |
+ add(Object) : boolean + interator(): interator + size() : int |
- 자료구조
- Set 기반으로 구현
<interface> List |
+ get(int) : Object |
- Collection Interface를 상속
- 순서를 저장함
ArrayList |
+ add(Object): boolean + get(int): Object + interator(): interator + size(): int |
- 자료구조
- List 기반으로 구현
<interface> Map |
+ get(Object) : Object + keySet(): Set + put(Object, Object): void |
- Set Interface를 상속
- put 메소드를 이용해서 key와 value를 저장
- key를 매개변수로 받아들이는 get 메소드를 이용해서 값을 꺼냄
- key는 중복되어서는 안됨
- key의 중복 방지를 위해서 모든 key들에 대한 정보를 읽어들일 수 있는 Set을 반환하는 keySet() 메소드가 있음.
HashMap |
+ get(Object) : Obejct + keySet(): Set + put(Object, Object): void |
- 자료구조
- Map 기반으로 구현
Generic
// 수정전 Box.java
public class Box {
private Object obj;
public void setObj(Object obj){
this.obj = obj;
}
public Object getObj(){
return obj;
}
}
public class BoxExam {
public static void main(String[] args) {
// 수정 전 코드에 사용
Box box = new Box();
box.setObj(new Object());
Object obj = box.getObj();
System.out.println(obj);
box.setObj("hellow");
String str = (String)box.getObj();
System.out.println(str);
box.setObj(10);
int num = (int)box.getObj();
System.out.println(num);
}
}
- 다른 타입을 적용할 때는 형변환을 통해서 값을 기입할 수 있음.
// 수정 후 Box.java
public class Box<E> {
private E obj;
public void setObj(E obj){
this.obj = obj;
}
public E getObj(){
return obj;
}
}
public class BoxExam {
public static void main(String[] args) {
Box<String> box2 = new Box<>();
box2.setObj("hello");
String str2 = box2.getObj();
System.out.println(str2);
Box<Integer> box3 = new Box<>();
box3.setObj(10);
int num2 = box3.getObj();
System.out.println(num2);
}
}
- <>로 가상의 타입을 Generic 문법을 통해서 적용할 수 있음.
- Generic이 아닌 형식으로 선언하면 형변환을 통해서 값을 변경해줘야하는 일이 생김.
- Generic을 선언하므로서 가상의 타입으로 선언해주고 실제 사용할 때는 특정 타입으로 다양한 타입을 사용하는 클래스 생성 가능
Set
- 중복이 없고, 순서도 없는 자료구조.
- Hashset과 TreeSet이 있음.
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetExam {
public static void main(String[] args) {
Set<String> set1 = new HashSet<>();
boolean flag1 = set1.add("Hello");
boolean flag2 = set1.add("world");
boolean flag3 = set1.add("Hello");
System.out.println(flag1);
System.out.println(flag2);
System.out.println(flag3);
System.out.println(set1.size());
// Set에서 바로 문자 출력
for(String str : set1){
System.out.println(str);
}
// Set의 Iterator를 활용해서 출력
Iterator<String> iter = set1.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}
}
- Generic 문법을 통해서 특정 타입을 사용하도록 지정
- 동일한 값은 추가되지 않음.
- add 함수는 boolean을 반환하고 예제 코드에서 보듯이 이미 들어있는 값은 추가되지 않음.
- Iterator를 통해서 set에 있는 값을 하나씩 꺼내서 볼 수 있음.
- Iterator는 순서가 없기 때문에 while을 통해서 hasNext()가 있을 때 동작하도록 구현하는게 나음.
List
- 배열과 비슷한 구조의 자료구조
- List는 데이터의 중복이 있을 수 있고, 순서도 있음.
import java.util.ArrayList;
import java.util.List;
public class ListExam {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Hello");
list.add(" ");
list.add("World");
list.add("Hello");
System.out.println(list.size());
for(int i = 0; i < list.size(); i++){
String str = list.get(i);
System.out.println(str);
}
}
}
- 중복이 있어도 List에 추가할 수 있음
- 순서가 있기 때문에 for문을 통해서 특정 index의 값을 사용할 수 있음.
Map
- Key와 Value를 쌍으로 저장하는 자료구조
- Key는 중복 될 수 없고, 값은 중복 될 수 있음.
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Iterator;
public class MapExam {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("001", "kim");
map.put("002", "lee");
map.put("003", "park");
map.put("004", "kim");
map.put("002", "kang");
System.out.println(map.size());
Set<String> keys = map.keySet();
Iterator<String> iter = keys.iterator();
while(iter.hasNext()){
String key = iter.next();
String value = map.get(key);
System.out.println(key + " : " + value);
}
}
}
- 동일한 key값에 value를 넣으면 마지막에 넣은 value로 적용됨.
- 모든 KeySet은 Set 타입으로 저장되므로 set을 이용해서 key 목록을 가져옴.
- Set은 Iterator 형식으로 순서와 중복이 없기 때문에 목록을 불러와서 Map의 key와 value를 사용할 수 있음.
참고자료:
https://school.programmers.co.kr/learn/courses/9/9-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89
자바 중급
자바 입문을 수강했다면 자바의 다양한 기능에 대해 더 알아볼 수 있는 자바 중급을 추천합니다.
school.programmers.co.kr
'BE > JAVA' 카테고리의 다른 글
[JAVA] 자바 IO ( Byte 단위, 다양한 타입, Char 단위 입출력) (0) | 2025.06.14 |
---|---|
[JAVA] 날짜와 시간 ( Date, Calendar, java.time ) (2) | 2025.06.14 |
[JAVA] java.lang + 오토박싱 (1) | 2025.06.09 |
[JAVA] 예외 처리 ( Exception, Throws, 커스텀 Exception ) (1) | 2025.06.07 |
[JAVA] 내부클래스 (0) | 2025.06.07 |