본문 바로가기

JAVA/Collection

Set

1.Set

저장 순서가 유지되지 않고, 중복 객체도 저장하지 못하게 하는 자료 구조 null도 중복을 허용하지 않기 때문에 1개의  null만 저장

구현 클래스로 HashSet, LinkedSet, TreeSet이 있다

 

1)Set의 특징

중복 불가.(객체의 경우, 객체 클래스에 String클래스에서 오버라이딩되어있는 equals()와 hashCode()를 통해 값과 주소를 비교하여 중복을 걸러낼 수 있다.)

 

2)주요 메소드

Set명.add(값/객체); : 주어진 값/ 객체를 맨끝에 추가

Set명.addAll(Collection객체;) : 주어진 Collection 객체를 Set에 추가

Set명.contains(값/객체) : 주어진 값/객체가 저장되어 있는지 여부

Set명.size() : Set의 크기를 리턴

Set명.clear(); : 저장된 모든 값 삭제

Set명.remove(값/객체); : 저장된 해당 값/객체 삭제

(ArrayList의 메소드와 거의 같다. Set에는 인덱스가 없기 때문에 인덱스를 사용해서 무언가를 하는 메소드들이 빠져있다.)

 

2.HashSet

Set에 객체를 저장할 때 hash함수를 사용하여 처리 속도가 빠름 동일 객체 뿐 아니라 동등 객체도 중복하여 저장하지 않는다.

순서를  자동으로 정렬 해준다(hashCode를 통해 정렬)

HashSet 객체명 = new HashSet();

 

Set역시 다형성이 적용된다.

Set 객체명 = new HashSet();

Collection 객체명 = new HashSet();

 

 

 

2)순서가 유지되지 않는 SET의 각 요소를 차례대로 꺼내는 방법

ㄱ) 1.set객체를 배열로 만들어서 하나씩 꺼내는 방법(배열 변환 후 for문)

 

Object[] oArr = Set명.toArray(); 
for(Object obj : oArr) { 
System.out.print(obj); 
}

 

ㄴ)2. Iterator 사용(주의점: 한방향만 읽을 수  있는 상태, 재사용 불가(중간에 멈추거나 할 수 없음))

 

.addAll()을 통해 어레이리스트 변환후 인덱스에 있는 값 출력

 

객체의 경우 중복을 제거하려면 객체내부에 equals()와 hashCode() 오버라이딩이 필요하다.

 

중복이 들어가있다.
객체클래스에 오버라이딩 후(String클래스에서 가져온 것)
출력해보면 중복이 제거 된 것을 알 수 있다.

3.LinkedHashSet

hashSet과 비슷하나 각각의 요소들이 주소값으로 연결되어 넣은 순서대로 들어가고, 중복을 제거해준다.

중복제거 후 순서대로 출력된 것을 볼 수 있다.

4.TreeSet

이진트리 구조로 작성되기 때문에 값이 들어갈때, 이미 저장된 값과 크기비교(자동 오름차순 정렬)

- 숫자(Integer, Double) 타입일 경우 값으로 정렬 
- 문자열(String) 타입일 경우 유니코드로 정렬 
- 정렬을 위해 java.lang.Comparable을 구현한 객체 요구 그러지 않을 경우 ClassCastException 발생 (Integer, Double, String 모두 Comparable 인터페이스를 통해 오름차순이 구현되어 있음) 

 

 

 

내림차순 정렬 시

 
-TreeSet 생성시 매개변수 생성자를 통해 재정렬 가능

ex) TreeSet tSet = new TreeSet(Comparator<? super E> comparator); 
-또 다른 방법으로 숫자(Integer, Double), 문자열(String) 타입을 제외한 Comparable을 상속 받는 객체인 경우 compareTo() 메소드의 오버라이딩 부분을 내림차순으로 변경

 

하는 방법이 있다고 하나 .addAll()메소드를 사용해 ArrayList로 변경후 정렬 후 출력이 간편할 듯 하다.

'JAVA > Collection' 카테고리의 다른 글

generics  (0) 2019.12.26
JAVAProperties  (0) 2019.12.21
Map  (0) 2019.12.21
ArrayList  (0) 2019.12.21