실무에서 list와 map은 많이 사용되기 때문에 잘 알고있으면 좋다.
* set : 중복객체 저장 x , 저장 순서 보장 x
순서와 상관없이 저장하므로 list보다 저장 속도는 빠르지만 원하는 값을 찾을때는 느리다.
set개열 컬렉션
- set 컬렉션은 저장 순서를 보장하지 않으며 객체의 중복 저장을 허용하지 않는다.
- set 컬렌션은 인덱스로 관리하지 않으며 들어갈 때의 순서와 나올때의 순서가 다를 수도 있다.
- set 컬렉션은 인덱스로 객체를 검색하는 기능이 없고 전체 객체를 대상으로 한번씩 반복하여 객체의 값을 가져오는 반복자(lterator)를 제공한다.
- 반복자는 lterator인터페이스를 구현한 객체를 의미하며 이 객체는 Set 인터페이스의 Iterator() 메서드를 호출하여 객체를 얻을 수 있다.
- Iterator 인터페이스의 주요 메서드
1.hasNext() : 가져올 객체가 있으면 true를 리턴하고 없으면 false를 리턴.
2.next() : 컬렉션에서 하나의 객체를 가져옴.
3. remove() : set 컬렉션에서 객체를 제거함.
* set 계열 컬렉션 주요 메서드
- 객체 추가 기능
1. add(E,e) : 주어진 객체를 저장, 성공적으로 저장되면 true를 리턴, 중복 객체를 저장하면 false를 리턴.
- 객체 검색 기능
1. contains(Object o) : 주어진 객체가 저장되어 있는지의 여부를 판단
2. isEmpty() : 저장된 객체를 한번씩 가져오는 반복자 객체를 리턴.
3. iterator() : 저장된 객체를 한번씩 가져오는 반복자 객체를 리턴
4. size() : 저장되어 있는 전체 객체 수를 리턴
- 객체 삭제 기능
1. clear() : 저장된 모든 객체를 삭제
2. remove(Object o) : 주어진 객체를 삭제
package collection.set;
import java.util.*;
public class HashSetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
//set에 객체를 추가 add()
set.add("닭강정");
set.add("만두");
set.add("피자");
set.add("싸이버거");
set.add("피자");
//set에 저장된 객체의 수를 알아보는 메서드 size()
// 현재 피자가 중복이 되어있다. set은 중복허용 안함. 그래서 사이즈가 4로 출력된다.
System.out.println("set에 저장된 객체 수: " + set.size()); //set에 저장된 객체 수: 4
System.out.println(set);
/*
-set의 객체 데이터를 사용하려면 반복자(Iterator)를 통해 모든 객체를 대상으로 한번씩 반복해서 꺼내야한다.
*/
Iterator<String> iter = set.iterator(); //반복 객체를 만들어줘야한다.
/*String s = iter.next();
System.out.println(s);
s = iter.next();
System.out.println(s);
s = iter.next();
System.out.println(s);
이런식으로 할경우 코드가 너무 길어진다. 때문에 아래와 같은 방법으로 코딩해준다.*/
/*
- 반복자 객체가 next()메서드를 통해 set내부의 데이터를 반복소진할 때 더 이상 조회할 데이터가 없으면 예외를 발생시키기 때문에
hasNext()를 통해 더 이상 소모할 데이터가 있는지의 유무를 체크한다.
*/
while(iter.hasNext()) {
String s = iter.next();
if(s.equals("닭강정")) {
System.out.println(s + "맛있지요");
break;
}
}
//set의 데이터 삭제 기능 remove(), clear()
set.remove("단무지");
System.out.println(set);
set.clear();
if(set.isEmpty()) {
System.out.println("set이 비어있음.");
}else {
System.out.println("set이 비어있지 않음");
}
}
}
----결과-----
set에 저장된 객체 수: 4
[만두, 닭강정, 싸이버거, 피자]
닭강정맛있지요
[만두, 닭강정, 싸이버거, 피자]
set이 비어있음.
* HashSet
- HashSet 클래스는 Set인터페이스를 구현한 컬렉션이므로 저장된 객체의 순서를 보장하지 않고 중복을 허용하지 않는다.
- HashSet을 사용하면 많은 양의 데이터를 관리할 때 추가/삭제/검색 등에 있어서 순차적으로 데이터를 관리하는 것에 비해서 속도가 향상된다.
* Map : key, value 쌍을 가진 Entry 객체로 데이터를 저장.
비전형 데이터 저장 시 유용.
*Map 계열 컬렉션
- Map컬렉션은 키와 값으로 구성된 Entry 객체를 저장하는 구조를 가지고있다.
- 키는 중복저장 될 수 없지만 값은 중복 저장될 수 있다.
* Map 계열 주요 메서드
- 객체 추가 기능
1. put(K, key, V value) : 주어진 키와 값을 축, 정상적으로 저장도면 그 값을 리턴
- 객체 검색 기능
1. containKey(Object Key) : 주어진 키가 있는지의 여부를 확인
2 containsValue(Object value) : 주어진 값이 있는지의 여부를 확인
3 get(Object key) : 주어진 키에 들어있는 값을 리턴
4 isEmpty() : 컬렉션이 비어있는지의 여부를 확인
5 size() : 저장된 키의 총 수를 리턴
6 value() : 저장된 모든 값을 컬렉션에 담아서 리턴
7 keySet() :저장된 모든 키를 set객체에 담아서 리턴
8 entrySet(): 키와 값의 쌍으로 구성된 모든 entry객체를 set에 담아서 리턴
- 객체 삭제 기능
1. clear() : 모든 entry를 삭제
2. remove(Object Key) : 주어진 키와 일치하는 entry객체를 삭제
package collection.map;
import java.util.*;
public class HashMapExample {
public static void main(String[] args) {
// map은 우리가 키도 만들어줘야한다 그래서 키와 값 2개의 제너럴을 준다.
Map<String, Integer> map = new HashMap<>();
//map에 객체를 저장 put(Key, Value)
map.put("치킨", 20000);
map.put("라면", 2000);
map.put("족발", 30000);
//중복 key를 통해 put을 사용하면 value가 수정됨.
map.put("라면", 3000);
System.out.println(map);
//map에 저장된 총 Entry객체 수 얻기 size()
System.out.println("map에 저장된 총 객체 수: " + map.size());
//map에 저장된 Value값 얻기 get(key)
int price = map.get("족발");
System.out.printf("족발의 가격: %d원\n", price);
//map에서 key를 전부 추출하는 메서드 keySet()
Set<String> kSet = map.keySet();
System.out.println(kSet);
Iterator<String> kIter = kSet.iterator();
System.out.println("----------------------");
while(kIter.hasNext()) {
String foodName = kIter.next();
int foodPrice = map.get(foodName);
System.out.printf("%s의 가격은 %d원입니다.\n",
foodName, foodPrice);
}
//map내부에 있는 key의 유무를 확인하는 메서드 containsKey()
String food = "감자";
if(map.containsKey(food)) {
System.out.println(food + "의 가격은 "
+ map.get(food));
} else {
System.out.println(food + "는 없는 메뉴입니다.");
}
//map 내부 데이터 삭제 remove(key)
//해당 key에 대응하는 Entry객체를 삭제.
map.remove("치킨");
System.out.println(map);
map.clear();
if(map.isEmpty()) {
System.out.println("map이 비어있음");
}else {
System.out.println("map이 비어있지 않음");
}
}
}
-----------결과---------------
{족발=30000, 치킨=20000, 라면=3000}
map에 저장된 총 객체 수: 3
족발의 가격: 30000원
[족발, 치킨, 라면]
----------------------
족발의 가격은 30000원입니다.
치킨의 가격은 20000원입니다.
라면의 가격은 3000원입니다.
감자는 없는 메뉴입니다.
{족발=30000, 라면=3000}
map이 비어있음
'IT' 카테고리의 다른 글
11-1. JSP - JDBC 프로그래밍 select, delete (1) | 2022.10.11 |
---|---|
11. JSP - JDBC(Java Database Connectivity) 프로그래밍 (0) | 2022.10.11 |
16-1. 자바 예외처리 - try ~ catch (1) | 2022.10.06 |
19. 자바 - List 컬렉션 기초 (1) | 2022.10.05 |
18. 자바 - java.util 패키지 (0) | 2022.10.05 |