Set 컬렉션의 특징 및 주요 메소드
특징
수학의 집합에 비유될 수 있다.
저장 순서가 유지되지 않는다.
객체를 중복해서 저장할 수 없고, 하나의 null만 저장할 수 있다.
구현 클래스
HashSet, LinkedHashSet, TreeSet
주요 메소드
기능 |
메소드 |
설명 |
객체 추가 |
boolean add(E e) |
주어진 객체를 저장, 객체가 성공적으로 저장되면 |
객체 검색 |
boolean contains(Object o) |
주어진 객체가 저장되어 있는지 여부 |
isEmpty() |
컬렉션이 비어 있는지 조사 |
|
Iterator<E> iterator() |
저장된 객체를 한번씩 가져오는 반복자 리턴 |
|
int size() |
저장되어 있는 전체 객체수 리턴 |
|
객체 삭제 |
void clear() |
저장된 모든 객체를 삭제 |
boolean remove(Object o ) |
주어진 객체를 삭제 |
객체 추가 및 삭제
Set 컬렉션은 인덱스로 객체를 검색해서 가져오는 메소드가 없다.
대신, 전체 객체를 대상으로 한번씩 반복해서 가져오는 반복자(Iterator)를 제공한다.
Set<String> set = ...;
Iterator<String> iterator = set.iterator();
리턴타입 |
메소드명 |
설명 |
boolean |
hasNext() |
가져올 객체가 있으면 true를 반환하고 없으면 false를 반환한다. |
E |
next() |
컬렉션에서 하나의 객체를 가져온다. |
void |
remove() |
Set 컬렉션에서 객체를 제거한다. |
Set<String> set = ...; Iterator<String> iterator = set.iterator(); while(iterator.hasNext()){ //String 객체를 하나 가져옴 String str= iterator.next(); } 저장된 객체 수 만큼 루핑한다. |
== |
Set<String set = ...; for(String str : set) { } |
반복자를 통한 객체 제거
while(iterator.hasNext()){
String str= iterator.next();
if(str.equals("홍길동")){
iterator.remove();
}
}
HashSet
특징
동일 객체 및 동등 객체는 중복 저장하지 않는다.
동등 객체 판단 방법
Exam1
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSetExample1 {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Java");
set.add("JDBC");
set.add("Servlet/JSP");
set.add("Java"); //같은 객체이기 떄문에 저장이 안됨
set.add("iBATIS");
int size = set.size();
System.out.println("총 객체수: " + size);
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println("\t" + element);
}
set.remove("JDBC");
set.remove("iBATIS");
System.out.println("총 객체수: " + set.size());
for (String element : set) {
System.out.println("\t" + element);
}
set.clear();
if (set.isEmpty()) {
System.out.println("비어 있습니다.");
} else {
System.out.println("비어 있지 않습니다.");
}
}
}
결과
총 객체수: 4
Java
JDBC
Servlet/JSP
iBATIS
총 객체수: 2
Java
Servlet/JSP
비어 있습니다.
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSetExample1 {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Java");
set.add("JDBC");
set.add("Servlet/JSP");
set.add("Java"); //같은 객체이기 떄문에 저장이 안됨
set.add("iBATIS");
int size = set.size();
System.out.println("총 객체수: " + size);
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println("\t" + element);
}
set.remove("JDBC");
set.remove("iBATIS");
System.out.println("총 객체수: " + set.size());
for (String element : set) {
System.out.println("\t" + element);
}
set.clear();
if (set.isEmpty()) {
System.out.println("비어 있습니다.");
} else {
System.out.println("비어 있지 않습니다.");
}
}
}
결과
총 객체수: 4
Java
JDBC
Servlet/JSP
iBATIS
총 객체수: 2
Java
Servlet/JSP
비어 있습니다.
Exam2
public class Member {
public String name;
public int age;
public Member(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Member) {
Member member = (Member) obj;
return member.name.equals(name) && member.age == age;
} else {
return false;
}
}
@Override
public int hashCode() {
return name.hashCode() + age;
}
}
import java.util.HashSet;
import java.util.Set;
public class HashSetExample2 {
public static void main(String[] args) {
Set<Member> set = new HashSet<>();
set.add(new Member("김나박", 30));
set.add(new Member("김나박", 30));// Member클래스의 hashCode()와 equals()를 재정의해서 동등한객체를 만들어 줌으로써
// 동등한 객체.. 때문에 1개의 객체만 저장이됨
System.out.println("총 객체수" + set.size());
}
} //결과 총 객체수1
'JAVA > JAVA' 카테고리의 다른 글
자바 컬렉션) 검색 기능을 강화시킨 컬렉션 (0) | 2018.06.15 |
---|---|
자바 컬렉션) Map 컬렉션 (0) | 2018.06.14 |
람다식) 표준 API의 함수적 인터페이스 (0) | 2018.06.10 |
람다식 ) 클래스 멤버와 로컬 변수 사용 (0) | 2018.06.10 |
람다식 타겟 타입과 함수적 인터페이스 (0) | 2018.06.09 |