첫 번째 줄에는 T쌍의 수를 나타내는 정수가 있다. 다음 라인들에는
공백으로 구분된 두개의 문자열이 입력된다.
Set 인터페이스의 구현 클래스다.
a. 중복된 값을 허용하지 않고, 자동으로 제거해준다.따라서 값의 존재 유무를 파악할 때 사용할 수 있다.
b. 입력된 순서도 보장되지 않는다.
c. null을 값으로 허용한다.
HashSet<Integer> set1 = new HashSet<Integer>();//HashSet생성
HashSet<Integer> set2 = new HashSet<>();//new에서 타입 파라미터 생략가능
HashSet<Integer> set3 = new HashSet<Integer>(set1);//set1의 모든 값을 가진 HashSet생성
HashSet<Integer> set4 = new HashSet<Integer>(10);//초기 용량(capacity)지정
HashSet<Integer> set5 = new HashSet<Integer>(10, 0.7f);//초기 capacity,load factor지정
HashSet<Integer> set6 = new HashSet<Integer>(Arrays.asList(1,2,3));//초기값 지정
기본 생성시 initial capacity(16), load factor(0.75)가 디폴트다.
저장 공간보다 값이 추가로 들어오면 약 두배로 저장 용량을 자동으로 늘린다.
그래서 과부하가 많이 발생할 수 있기 때문에, 데이터 개수를 안다면 처음부터 지정해주는 것이 좋다.
HashSet<Integer> set = new HashSet<Integer>();//HashSet생성
set.add(1); //값 추가
set.add(2);
set.add(3);
add(value)메소드를 사용하면 값을 추가할 수 있다. 값이 Hashset 안에 없다면
값을 추가 하고 true를 반환해주고, 만약 존재하는 값이면(중복을 허용하지 않으므로)
false를 반환한다.
HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(1,2,3));//HashSet생성
set.remove(1);//값 1 제거
set.clear();//모든 값 제거
remove메소드로 값을 지운다. 값이 존재하면 삭제 후 true를 반환, 없다면 false반환.
값을 전부 지울 경우 clear메소드를 쓴다.
4.크기 구하기
HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(1,2,3));//HashSet생성
System.out.println(set.size());//set 크기 : 3
size 메소드로 set의 크기를 구할 수 있다.
HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(1,2,3));//HashSet생성
System.out.println(set); //전체출력 [1,2,3]
Iterator iter = set.iterator(); // Iterator 사용
while(iter.hasNext()) {//값이 있으면 true 없으면 false
System.out.println(iter.next());
}
그냥 System.out.println(set); 해주면 []안에 set의 전체 값이 출력된다.
만약 전체 객체를 한번씩 반복해서 가져오려면 iterator를 사용한다.
hasNext()는 가져올 값이 있으면 true, 없으면 false를 반환한다.
next()메소드로 객체 하나를 가져올 수 있다.
HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(1,2,3));//HashSet생성
System.out.println(set.contains(1)); //set내부에 값 1이 있는지 check : true
내부에 원하는 값이 있는지 contains메소드를 사용해 검색해볼 수 있다.
만약 있으면 true, 없으면 false를 반환한다.
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class JavaHashset {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int t = s.nextInt(); // 첫줄에 입력되는 정수 t는 pairs의 갯수다.
String [] pair_left = new String[t]; //pair_left: [null, null, null, null, null]
String [] pair_right = new String[t];//pair_right: [null, null, null, null, null]
for (int i = 0; i < t; i++) { //반복문을 돌리면서 값을 입력받는다.
pair_left[i] = s.next(); // ex) i=0이면, pair_left: ["john", null, null, null, null] pair_right: ["tom", null, null, null, null]
pair_right[i] = s.next();
}
//Write your code here
HashSet<String> pairs = new HashSet<>(); //HashSet pairs를 생성한다.
for(int i=0; i<t; i++){ //
pairs.add(pair_left[i]+" "+pair_right[i]); // 문자열 "왼쪽 오른쪽" 형태로 값을 추가한다. 값이 내부에 존재하면 true, 없으면 false 반환이다.
System.out.println(pairs.size()); // size메소드를 사용해 크기를 구한다. 중복값이 있다면 그 값은 하나만 세어 준다.
}
}
}