본문 바로가기
JAVA/[JAVA] 바구니

[JAVA] Set Collection

by oncerun 2020. 5. 2.
반응형

 

Set Collection

 

set collection은 수학의 집합과 비슷합니다 집합은 중복은 허용하지 않으면서 순서와는 상관이 없습니다.

그렇기에 set collection은 저장순서가 유지되지 않으며, 중복된 객체를 저장할 수없습니다. 순서가 없기에 중복된 객체를 저장하면 중복된 객체를 구별할 수 없습니다. null값 또한  중복되지 않기에 하나의 null값만 저장할 수 있습니다.

 

 

 

구현 클래스

 

  • HashSet
  • LinkedHashSet
  • TreeSet

 

주요 메서드 

기능

메소드

설명

객체를 추가하는 기능

boolean add(E e)

주어진 객체를 저장, 객체가 저장되면 true를 리턴하고 중복 객체면 false를 리턴합니다

객체를 검색하는 기능

boolean contains(Object o)

주어진 객체가 저장되어 있는지 여부를 반환합니다.

isEmpty()

컬렉션이 비어있는지 조사합니다.

Iterator <E> iterator()

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

int size()

저장되어있는 전체 객체수 리턴합니다.

객체를 삭제하는 기능

void clear()

저장된 모든 객체를 삭제합니다

boolean remove(Object o)

주어진 객체를 삭제합니다.

 

검색하는 기능 중 ArrayList , Vector, LinkedList처럼 index로 객체를 가져오는 메서드가 없습니다.

그 이유는 순서가 유지되지 않는 컬렉션이기 때문에 index를 가지고 검색할 수 없기 때문입니다.

따라서 순차적으로 하나씩 빼와 사용할 수 있는 메서드인 Iterator가 존재합니다.

 

 

Set Colletion에서  객체를 추가 및 삭제하는 방법

Set<String> hashSet = new HashSet<String>();
Set<String> linkedSet = new LinkedHashSet<String>();
Set<String> treeSet = new TreeSet<String>();

hashSet.add("안녕하세요");
hashSet.remove("안녕하세요");

 

Iterator (반복자)

 

Set Colletion은 인덱스로 객체를 검색해 가지고 오는 메서드가 존재하지 않습니다.

대신에 저장된 전체 객체를 대상으로 한 번씩 반복해서 가져오는 반복자를 Iterator를 제공합니다.

 

Iterator method

Return Type 

Method Name

Description

boolean

hasNext()

가져올 객체가 존재하면 true를 반환하고 없으면 false를 반환한다.

E

next()

컬렉션에서 하나의 객체를 가져온다.

void

remove()

Set Colletion에서 객체를 제거한다.

 

사용 예제.

 

여기서 다시 한번 확인할 수 있지만 Set Colletion은 객체를 우리가 순서대로 저장한다고 해도

순서 없이 저장한다는 것을 확인할 수 있으며 값을 가져올 때 반복자를 붙여 출력을 해야 합니다.

 

 

 

HashSet

 

set <E> set = new HashSet <E>();

 

특징

 

- 동일객체 및 동등 객체는 중복 저장하지 않는다.

 

동등 객체란

hashCode() 값이 같고, equals() 값이 같다면 동등 객체로 판단합니다.

 

 

중복이 허용되지 않는 예제

5개의 객체를 저장했지만 담긴 객체는 4개뿐이다.

 

 

 

while문으로 출력하는 것 대신 forEach문을 이용

 

 

 

컬렉션이 비어있음을 확인하는 예제

set.clear();
if(set.isEmpty()) {
System.out.println("컬렉션이 비어있습니다.");
}

 

 

 

 

동등 객체 확인하기.

 

새로운 Member클래스의 생성자와 필드입니다.

public String name;
public int age;
public String gender;

public Member(String name, int age , String gender) {
this.name = name;
this.age = age;
this.gender =gender;
}

 

새로운 클래스의 equals와 hashCode를 오버라이드 합니다.

 

equals

인자가 Member의 객체이면 Member 타입으로 변환한 뒤 객체를 생성합니다.

객체의 name과 age값이 동일하다면 true를 반환합니다.

@Override
public boolean equals(Object obj) {
if(obj instanceof Member) {
Member member = (Member) obj;
return member.name.equals(name) && member.age==age;
}
return false;
}

 

 

hashCode

만약 name과 age가 같다면 동일한 hashcode값을 리턴할 것입니다.

@Override
public int hashCode() {

return Objects.hash(name,age);
}

 

두 객체는 동등 객체로 취급되므로 저장은 하나밖에 되지 않습니다.

 

 

 

반응형

'JAVA > [JAVA] 바구니' 카테고리의 다른 글

[JAVA] Arrays 클래스  (0) 2020.05.07
[JAVA] Map Colletion  (0) 2020.05.03
[JAVA] List Collection  (0) 2020.04.28
[JAVA] Collection FrameWork  (0) 2020.04.28
[JAVA] System Class  (0) 2020.04.22

댓글