Set  컬렉션의 특징 및 주요 메소드

 특징

수학의 집합에 비유될 수 있다.

저장 순서가 유지되지 않는다.

객체를 중복해서 저장할 수 없고, 하나의   null만 저장할 수 있다.

구현 클래스

HashSet,    LinkedHashSet,    TreeSet

주요 메소드

기능 

메소드 

설명 

객체

 추가 

  boolean add(E e) 

  주어진 객체를 저장, 객체가 성공적으로 저장되면
  true를 리턴하고 중복 객체면 fasle 를 리턴 

객체

 검색

  boolean contains(Object o) 

  주어진 객체가 저장되어 있는지 여부 

  isEmpty() 

  컬렉션이 비어 있는지 조사 

  Iterator<E> iterator() 

  저장된 객체를 한번씩 가져오는 반복자 리턴 

  int size() 

  저장되어 있는 전체 객체수 리턴 

객체

 삭제 

  void clear() 

  저장된 모든 객체를 삭제 

  boolean remove(Object o )

  주어진 객체를 삭제 



객체 추가 및 삭제

Set<String> set = ...;
set.add("홍길동");          객체추가
set.add("김나박");            객체 추가
set.remove("홍길동");     객체 삭제

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 비어 있습니다.

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


+ Recent posts