Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

오늘은 어제보다 나아지길

[Java] 컬렉션 프레임워크 본문

[Java]

[Java] 컬렉션 프레임워크

그녕쓰 2020. 12. 15. 16:34

자바에서 컬렉션 프레임워크의 주요 인터페이스는 LIst, Set, Map이 있다.

 

컬렉션들의 특징 

인터페이스 분류 특징 구현 클래스
Collection List - 순서를 유지하고 저장
- 중복 저장 가능 
ArrayList, Vector, LinkedList
Set - 순서를 유지하지 않고 저장
- 중복 저장 안됨
HashSet, TreeSet
Map - 키와 값의 쌍으로 저장
- 키는 중복 저장 안 됨 
HashMap, HashTable,
TreeMap, Propertues

 

List 컬렉션


List 컬렉션은 객체를 일렬로 늘어놓은 구조이며

 

객체를 인덱스로 관리하기에, 객체를 검색, 삭제할 수 있는 기능을 제공한다.

 

기능 메소드 설명
객체
추가
add(E e) 주어진 객체를 맨 끝에 추가
add(int index, E element) 주어진 인덱스에 객체를 추가
set(int index, E element) 주어진 인덱스에 저장된 객체를 주어진 객체로 바꿈
객체 
검색
contain(Object o) 주어진 객체가 저장되어 있는지 여부
get(int index) 주어진 인덱스에 저장된 객체를 리턴
isEmpty() 컬렉션이 비어 있는지 조사
size() 저장되어 있는 전체 객체수를 리턴
객체 
삭제
clear() 저장된 모든 객체를 삭제
remove(int index) 주어진 인덱스에 저장된 객체를 삭제
remove(Object o) 주어진 객체를 삭제

 

ArrayList

 

ArrayList는 List 인터페이스의 구현 클래스, ArrayList에 객체를 추가하면 객체가 인덱스로 관리된다.

 

// 호출방법 
// ArrayList
List<E> list = new ArrayList<E>();
List<String> list = new ArrayList<String)();

list.add("아이스 아메리카노");
list.add("카페 라떼");
list.add(1, "핫초코");

int size = list.size(); // 3

String getList = list.get(2) // 카페 라떼


for(int i=0; i<list.size(); i++){
	String str = list.get(i);
    System.out.println(i + ":" + str);
    // 0 : 아이스 아메리카노
    // 1 : 핫초코
    // 2 : 카페 라떼
}

list.remove(2) // 카페 라떼 삭제

 

고정된 객체들로 구성된 List를 생성할 때 ArrayasList(T...a) 메소드를 사용한다.

 

T 타입 파라미터에 맞게 asList()의 매개값을 순차적으로 입력하거나, T[] 배열을 매개값으로 주면 된다.

 

// 호출방법 
// ArrayasList
List<T> list = ArrayasList(T...a);


List<String> list1 = ArrayasList("자바","오라클","스프링");
for(String str : list1) {
	System.out.println(str);
    	// 자바
    	// 오라클
    	// 스프링
}

List<Integer> list2 = ArrayasList(1,2,3);
for(int value : list2) {
	System.out.println(value);
    	// 1
    	// 2
    	// 3
}

 

Vector

 

ArrayList와 동일한 내부구조를 가졌지만 Vector는 동기화된 메소드로 구성되어 있기에 멀티 스레드 환경에서 

안전하게 객체를 추가, 삭제할 수 있다.

 

// 호출방법 
// ArrayasList
List<E> list = new Vector<E>();

list.add("마우스");

list.remove(0);

 

LinkedList

 

ArrayList와 사용방법은 똑같지만 내부 구조는 인접 참조를 링크로해서 체인 처럼 관리한다.

 

빈번한 객체 삭제와 삽입이 일어나는 경우에는 LinkedList가 좋은 성능을 발휘한다.

 

// 호출방법 
// ArrayasList
List<E> list = new LinkedList<E>();

list.add("마우스");

list.remove(0);

Set 컬렉션


Set 컬렉션은 저장 순서가 유지 되지 않고, 중복 저장이 불가능하다.

기능 메소드 설명
객체 추가 boolean add(E e) 주어진 객체를 저장, 저장되면 true 실패 시 false를 반환
객체
검색
boolean contains(Object o) 주어진 객체가 저장되어 있는지 여부
isEmpty() 컬렉션이 비어 있는지 조사
Iterator<E>iterator() 저장된 객체를 한 번씩 가져오는 반복자 리턴
int size() 저장되어 있는 전체 객체 수 리턴
객체
삭제
void clear() 저장된 모든 객체를 삭제
boolean remove(Object o) 주어진 객체를 삭제

 

 

Set 컬렉션에서는 객체를 검색해서 가져오는 메소스가 없기에 객체를 한번씩 반복해서 가져오는

반복자  Iterator 인터페이스를 사용해야 한다.

 

리턴타입 메소드명 설명
boolean hasNext() 가져올 객체가 있으면 true, 없으면 false를 리턴
E next() 컬렉션에서 하나의 객체를 가져온다.
void remove() 객체를 제거한다.

 

HashSet

 

HashSet은 객체들을 순서 없이 저장하고 동일한 객체는 중복 저장하지 않는다.

// HashMap
Set<E> set = new HashMap<E>();


Set<String> set = new HashSet<String>();

set.add("개미");
set.add("배짱이");
set.add("사마귀");

int size = set.size(); // 3

Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) {
	String str = iterator.next();
	System.out.println(str);
    // 개미
    // 배짱이
    // 사마귀
}

set.remove("배짱이") // 배짱이 삭제

 


Map 컬렉션


Map 컬렉션은 키와 값으로 구성된 Entry 객체를 저장하는 구조

키와 값은 모두 객체이며 키는 중복 x, 값은 중복 o

 

기능 메소드 설명
객체 추가 V put(K key, V value) 주어진 키와 값을 추가, 저장되면 값을 리턴
객체
검색
boolean containsKey(Object key) 주어진 키가 있는지 여부 
boolean containsValue(Object Value) 주어진 값이 있는지 여부
Set<Map.Entry<K,V>>entrySet() 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 리턴
V get(Object key) 주어진 키가 있는 값을 리턴
boolean isEmpty() 컬렉션이 비어 있는지 여부
Set<K>keySet() 모든 키를 Set 객체에 담아서 리턴
int size() 저장된 키의 총 수를 리턴
Collection<V> values() 저장된 모든 값을 Collection에 담아서 리턴
객체
삭제
void clear() 모든 Map.Entry(키, 값)를 삭제
V remove(Object key) 주어진 키와 일치하는 Map.Entry를 삭제하고 값을 리턴

 

 

HashMap

 

대표적인 Map 컬렉션

키와 값의 타입은 (byte, short, int, float, double, boolean, char)을 사용할수 없고 클래스 및 인터페이스 타입만 가능 

주로 키 타입은 String을 많이 사용한다.

 

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

map.put("수리",90);
map.put("언어",91);
map.put("외국어",100);
map.put("언어",89);

int size = map.size(); // 3

String getMap = map.get("수리"); // 90

Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();

while(entryIterator.hasNext()) {
    Map.Entry<String, Integer> entry = entryIterator.next();
    String key = entry.getKey();
    Integer value = entry.getValue();
    System.out.println("\t" + key + ":" + value);
    // 수리 : 90
    // 외국어 : 100
    // 언어 : 89
}

 

Hashtable

 

HashMap과 동일한 내부 구조를 가지고 있지만 Hashtable은 동기화된 메소드로 구성되어 있기에 멀티 스레드 환경에서

안전하게 객체를 추가, 삭제할 수 있다.

 

Map<String, Integer> map = new Hashtable<String, Integer>();

map.put("스타벅스",1)

map.get("스타벅스"); // 1

map.remove("스타벅스");

 

'[Java]' 카테고리의 다른 글

[Java] 상속  (0) 2021.01.04
[Java] 클래스 정리  (0) 2020.11.16
[Java] 자바 다시 시작하기  (0) 2020.11.12
Comments