set은 지난번 게시글에 올렸던 list와 같이 자바 컬렉션 프레임워크중 하나다.
set은 list와 비슷하지만 순서가 없고 중복을 허용하지 않는다는 점이 다르다. 이러한 특징때문에 set은 중복을 제거할 때 많이 사용한다.
set을 구현한 클래스는 인터페이스므로 이를 상속받는 Hashset을 사용한다.
Hashset< E e > set = new Hashset< >( );
set의 길이확인 및 값 추가는 list와 동일한 함수를 사용한다.
이때 주의해야 할 점은 add를 이용하여 값을 넣을 때 같은 값을 여러번 넣어도 중복허용이 안되기 때문에 처음 한 번만 반영된다.
set은 순서가 없기 때문에 index가 존재하지 않는다.
따라서 list처럼 .get을 이용해 값을 불러올 수 없다.
하지만 향상된 for문 또는 순환자 Iterator를 사용하여 내부요소를 출력할 수 있다.
for(Strign s : set) {
System.out.println(s);
// set안에 있는 각 문자열을 s라고 할 때
// 각각의 s를 출력한다.
}
// 순환자 Iterator를 이용한 반복 (특정 클래스에서 사용해야 한다)
Iterator<String> it = set.iterator();
while(it.hasNext()) { // 순환자에서 아직 사용하지 않은 값이 남아있다면
String s = it.next(); // 그 값을 꺼내서 변수에 담은 다음
System.out.println(s); // s를 출력한다
}
다른 방법으로는 list로 바꾸어서 출력할 수도 있다.
이미 만들어진 컬렉션을 다른 컬렉션의 생성자에 전달하면 요소를 유지하면서 새로운 컬렉션을 생성한다.
// Set안에 있는 문자열을 그대로 새로운 List 생성에 사용하기
ArrayList<String> list = new ArrayList<>(set);
System.out.println("list : " + list);
// list로 바꾸어주면 순서가 생겨서 정렬도 가능해지고
//특정 순번에 값을 넣는것도 가능해진다