728x90
List 컬렉션은 순서를 유지하지만 Set컬렉션은 저장순서 유지가 되지 않는다 또한 객체 중복 저장이 불가하고 하나의 null 만 저장 가능하다
1. HashSet
가장 많이 사용된다
1-1. 컬렉션 생성 방법
Set<E> set = new HashSet<E>(); // E에 지정된 타입의 객체만 저장
Set<E> set = new HashSet<>(); // E에 지정된 타입의 객체만 저장
Set set = new HashSet(); // 모든 타입의 객체 저장
1-2. 동일한 객체를 저장하지 않는다
package ch15.sec03.exam1;
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
// HashSet 컬렉션 생성
Set<String> set = new HashSet<>();
// 객체 저장
set.add("Java");
set.add("JDBC");
set.add("JSP");
set.add("Java"); // 중복 객체라서 저장하지 않음
set.add("Spring");
// 저장된 객체 수 출력
int size = set.size();
System.out.println("총 객체 수 : " + size); // 총 객체 수 : 4
}
}
1-2-1. 다른 예제
package ch15.sec03.exam2;
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
// HashSet 컬렉션 생성
Set<Member> set = new HashSet<>();
// Member 객체 저장
// 인스턴스는 다르지만 동등 개체이므로 객체 1개만 저장할 듯
set.add(new Member("홍길동", 30));
set.add(new Member("홍길동", 30));
// 저장된 객체 수 출력
System.out.println("총 객체 수 : " + set.size()); // 총 객체 수 : 1
}
}
package ch15.sec03.exam2;
public class Member {
public String name;
public int age;
public Member(String name, int age) {
this.name = name;
this.age = age;
}
// hashCode 재정의
// name과 age 값이 같으면 동일한 hashCode가 리턴됨
@Override
public int hashCode() {
return name.hashCode() + age;
}
// equals 재정의
// name과 age 값이 같으면 true 리턴
@Override
public boolean equals(Object obj) {
if(obj instanceof Member){
Member target = (Member) obj;
return target.name.equals(name) && (target.age == age);
}else{
return false;
}
}
}
1-3. 검색
Set 컬렉션은 객체를 검색해서 가져오는 메소드가 없다. 대신 객체를 한개씩 반복해서 가져와야 하는데, 여기에는 두가지 방법이 있다. 하나는 foreach를 사용하는 것이다 다른 하나는 iterator() 메소드로 반복자를 얻어 객체를 하나씩 가져오는 것이다
1-3-1. iterator
Set<E> set = new HashSet<>();
Iterator<E> iterator = set.iterator();
사용방법은 다음과 같다
while(iterator.hashNext()){
E e = iterator.next();
}
hashNext 메소들 가져올 객체가 있는지 먼저 확인하고 true를 리턴할 때만 next() 메소드로 객체를 가져온다. 만약 이 객체를 제거하고 싶다면 remove를 사용한다
package ch15.sec03.exam3;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
// 객체 추가
set.add("Java");
set.add("JBDC");
set.add("JSP");
set.add("Spring");
// 객체를 하나씩 가져와서 처리
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()){
// 객체를 하나 가져오기
String element = iterator.next();
System.out.println(element);
/*
Java
JBDC
JSP
Spring
*/
if(element.equals("JSP")){
// 가져온 객체를 컬렉션에서 제거
iterator.remove();
}
}
System.out.println();
// 객체 제거
set.remove("JBDC");
// 객체를 하나씩 가져와서 처리
for(String element : set){
System.out.println(element);
/*
Java
Spring
* */
}
}
}
2. HashMap
key와 value로 구성되어 있다.
2-1. 메소드
- 객체추가 : put
- Set<Map.Entry<K,V>>entrySet()
- keySet() : 모든 키를 Set 객체에 담아서 리턴
2-2. 생성
Map<String, Integer> map = new HashMap<String, Integer>();
Map<String, Integer> map = new HashMap<>();
2-3. 메서드 활용해보기
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Main {
public static void main(String[] args) {
// Map 컬렉션 생성
Map<String, Integer> map = new HashMap<>();
// 객체 저장
map.put("신용권", 85);
map.put("홍길동", 90); // 키가 같아서 제일 마지막에 저장한 값만 저장
map.put("동장군", 80);
map.put("홍길동", 95);
System.out.println("총 Entry 수 : " + map.size());
System.out.println();
// 키로 값 얻기
String key = "홍길동";
int value = map.get(key);
System.out.println(key + ": " + map.get("홍길동"));
System.out.println();
// 키 Set 컬렉션을 얻고 반복해서 키와 값을 얻기
Set<String> keySet = map.keySet();
Iterator<String> keyIterator = keySet.iterator();
while (keyIterator.hasNext()){
String k = keyIterator.next();
Integer v = map.get(key);
System.out.println(k + " : " + v);
}
System.out.println();
// 엔트리 Set 컬렉션을 얻고, 반복해서 키와 값을 얻기
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 k = entry.getKey();
Integer v = entry.getValue();
System.out.println(k + " : " + v);
}
System.out.println();
// 키로 엔트리 삭제
map.remove("홍길동");
System.out.println("총 Entry 수 : " + map.size());
System.out.println();
}
}
반응형
'Java 개념' 카테고리의 다른 글
JDBC 연동 (0) | 2023.09.04 |
---|---|
Stack과 Queue (0) | 2023.08.23 |
Collection - LinkedList (0) | 2023.08.22 |
Collection-ArrayList (0) | 2023.08.22 |
리스트 (0) | 2023.08.03 |