HashSet은 Set 인터페이스의 구현 클래스
Set의 성질을 그대로 상속받는다
Set은 객체를 중복해서 저장할 수 없고 하나의 null 값만 저장할 수 있다
저장 순서가 유지되지 않는다
만약 요소의 저장 순서를 유지해야 한다면 LinkedHashSet 클래스를 사용
Set 인터페이스를 구현한 클래스로는 HashSet과 TreeSet이 있다
HashSet의 경우 정렬을 해주지 않고 TreeSet의 경우 자동정렬을 해준다는
Set의 가장 큰 장점은 중복을 자동으로 제거해준다는 점입니다.
Set은 비선형 구조이기에 순서가 없으며 그렇기에 인덱스도 존재하지 않습니다.
따라서 값을 추가하거나 삭제할 때는 값이 Set 내부에 있는지 검색 한 뒤
추가나 삭제를 해야 하므로 속도가 List구조에 비해 느리다
[Java] 자바 HashSet 사용법 & 예제 총정리 (tistory.com) 참조 !!!! ★
set에 데이터를 추가하는 경우 add() 메서드를 이용
hs1.add("DD");
hs1.add("AA");
hs1.add("2");
hs1.add("CC");
hs1.add("BB");
hs1.add(3);
hs1.add(1);
System.out.println("set 데이터: "+ hs1);
System.out.println();
Set의 데이터의 순서가 X 중복을 허용하지 않는다
이미 있는 데이터를 add하면 false를 반환하고 데이터는 추가되지 않는다!
boolean isAdded = hs1.add("FF");
System.out.println("중복되지 않을때 "+ isAdded);
System.out.println("set 데이터: "+ hs1);
System.out.println();
isAdded = hs1.add("CC");
System.out.println("중복되지 않을때 "+ isAdded);
System.out.println("set 데이터: "+ hs1);
System.out.println();
Set은 수정하는 명령이 따로 없기 때문에
해당 자료를 삭제한 후 새로운 데이터를 추가해주어야 한다
<삭제하는 메소드>
1) clear() => set데이터 전체 삭제
2) remove(삭제할 자료) => 해당자료만 삭제
hs1.remove("FF");
System.out.println("삭제 후 set 데이터: "+hs1);
System.out.println();
hs1.add("EE");
System.out.println("set 데이터: "+ hs1);
hs1.clear();//전체자료 삭제
System.out.println("set의 자료 개수: "+hs1.size());
System.out.println();
set은 데이터의 순서가 없다
따라서 List처럼 인덱스로 데이터를 하나씩 불러올 수 X
데이터를 하나씩 얻기 위해서는 Iterator를 이용해야한다.
Iterator<데이터타입> iterator명 = 컬렉션.iterator();
hasNext() => 포인터 다음 위치에 데이터가 있으면 true,없으면 false를 반환한다
//set의 데이터를 접근하기 위핸 Iterator 객체 가져오기
Iterator it = hs1.iterator();
//데이터 개수만큼 반복하기
//hasNext() => 포인터 다음 위치에 데이터가 있으면 true,없으면 false를
// 반환한다.
while(it.hasNext()) { //다음 자료가 있는지 검사
//next() => 포인터를 다음 자료위치로 이동하고 이동한 위치의 자료를 반환한다.
System.out.println(it.next());
}
//1~100사이의 중복되지 않는 정수 5개 만들기
Set<Integer> intRnd = new HashSet<Integer>();
while(intRnd.size() < 5) {
int num = (int)(Math.random() * 100 + 1);
intRnd.add(num);
}
System.out.println("만들어진 난수들: "+intRnd);
//Collection유형의 객체들은 서로다른 자료 구조로 쉽게 변경해서 사용할수 있다.
//다른 종류의 객체를 생성할 때 생성자에 변경할 데이터를 넣어주면 된다.
List<Integer> intRndList = new ArrayList<Integer>(intRnd);
System.out.println("List 자료 출력...");
for(int i= 0; i <intRndList.size();i++) {
System.out.println(intRndList.get(i));
}
for(Integer num : intRndList) {
System.out.print(num+" ");
}
}
'고급JAVA' 카테고리의 다른 글
Equals Hashcode (0) | 2022.07.23 |
---|---|
Treeset (0) | 2022.07.23 |
Comparable / Comparator (0) | 2022.07.23 |
Stack & Queue (0) | 2022.07.23 |
ArrayList (0) | 2022.07.23 |