반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- ThreadGroup()
- 상관 서브 쿼리
- MemoryStream
- StringWriter
- Linux세팅
- 동기화
- 메모리스트림
- first-of-child
- Daemon()
- String char[] 형변환
- interrupt()
- 리눅스세팅
- sleep()메소드
- 리눅스셋팅
- 표현 언어
- include지시자
- include 지시자
- Linux셋팅
- include액션태그
- interrupted()
- first-child
- StringReader
- 아이디중복
- isinterrupted()
- ObjectInputStream
- char[] String 형변환
- 스레드그룸
- 상관서브쿼리
- InputDialog
- ID중복
Archives
- Today
- Total
다연이네
[days22] 컬렉션 클래스<Set> - HashSet 본문
반응형
HashSet
Collection <- Set계열 순서 없고 중복이 허용되지 않음
HashSet 컬렉션 클래스가 가장 많이 사용되는 대표적인 클래스로,내부적으로 HashMap을 이용해서 만들어졌다.
HashSet<Integer> hs = new HashSet<Integer>();
hs.add(9);
hs.add(1);
hs.add(15);
hs.add(1); // 중복을 허용하는지 확인하기 위해
hs.add(3);
hs.add(7);
System.out.println(hs);
//[1, 3, 7, 9, 15] 순서가 없다 => 0번째 가져오겠다 의미 없다
[문제] 로또번호 6개 만들어 출력
HashSet<Integer> lottos = new HashSet<Integer>(6);
Random rnd = new Random();
while (lottos.size()!=6) {
int lotto = rnd.nextInt(45)+1;
lottos.add(lotto);
}
System.out.println(lottos);
[문제] 로또 번호를 받아 정렬된 번호로 출력
=> ArrayList로 만들기 (LinkedArrayList도 상관 없음)
Set<Integer> set = new HashSet<Integer>(); //업캐스팅이 더 좋은 코딩이다
for (int i = 0;set.size() <6; i++) {
set.add((int)(Math.random()*45)+1);
}
System.out.println(set); //[32, 20, 6, 22, 25, 10]
ArrayList<Integer> list = new ArrayList<Integer>(set);
Collections.sort(list);
System.out.println(list); //[6, 10, 20, 22, 25, 32]
=> 만약, 중복 체크를 해서 안되도록 만들고 + 순서 유지하는 컬렉션 클래스가 있다면
set으로 받아 list로 만들 필요 없겠다 == LinkedHasgSet<E>
(*오름차순 정렬이 아닌 데이터 입력 순서대로 순서 유지)
LinkedHashSet<Integer> lhs = new LinkedHashSet<Integer>();
for (int i= 0; lhs.size() < 6; i++) {
lhs.add((int)(Math.random()*45)+1);
}
// Collections.sort(lhs); //얘는 list계열만 된다
System.out.println(lhs);
HashSet 특정 조건(학번)에 대한 중복 데이터 삽입 설정 - 오버라이딩
package review;
import java.util.HashSet;
public class Re03 {
public static void main(String[] args) {
//HashSet
HashSet<Member> hs = new HashSet<Member>();
//hs.add(1, "배다연",23);
hs.add(new Member(1, "배다연", 23));
hs.add(new Member(2, "김동준", 24));
hs.add(new Member(3, "캬라멜", 1));
hs.add(new Member(3, "캬라멜", 1));
System.out.println(hs.size());
//학번이 동일한 데이터가 new연산자로 인해 다른 객체로 인식되어
//중복 삽입 되었을 때 삽입하지 못하게 하는 방법
// 1=> 객체의 hashCode() 메소드를 사용해서 해시코드 얻어와서 같은지 체크 => hashcode 오버라이딩
// 2=> equals()함수를 사용해서 비교 => equals 오버라이딩
System.out.println(hs); //순서 없음
}
}
class Member {
int sno;
String name;
int age;
public Member(int sno, String name, int age) {
super();
this.sno = sno;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return String.format(">sno:%d, name:%s, age:%d"
, this.sno, this.name, this.age);
}
@Override
public boolean equals(Object obj) {
Member m;
if(obj instanceof Member && obj!=null) {
m = (Member) obj;
return m.sno == this.sno;
}
return false;
}
@Override
public int hashCode() {
return sno;
}
}
두개의 HashSet 교집합, 합집합, 차집합 구하기
package review;
import java.util.HashSet;
import java.util.Iterator;
public class Re04 {
public static void main(String[] args) {
HashSet<Integer> h1 = new HashSet<Integer>();
h1.add(1); h1.add(2); h1.add(3); h1.add(4); h1.add(5);
HashSet<Integer> h2 = new HashSet<Integer>();
h2.add(4); h2.add(5); h2.add(6); h2.add(7); h2.add(8);
System.out.println(h1);
System.out.println(h2);
HashSet<Integer> kyo = new HashSet<Integer>();
HashSet<Integer> cha = new HashSet<Integer>();
HashSet<Integer> hap = new HashSet<Integer>();
Iterator<Integer> ir1 = h1.iterator();
while (ir1.hasNext()) {
Integer num = ir1.next();
if(h2.contains(num)) kyo.add(num); //교집합
else cha.add(num); //차집합
}
System.out.println(kyo);
System.out.println(cha);
hap.addAll(h1);
hap.addAll(h2);
System.out.println(hap);//합집합
}
}
반응형
'Java' 카테고리의 다른 글
[days23] 컬렉션 클래스<Set> - TreeSet (0) | 2020.10.21 |
---|---|
[days22] sort(정렬) (0) | 2020.10.21 |
[days22] 컬렉션 클래스<List> - Stack과 Queue (0) | 2020.10.21 |
[days22] 컬렉션 클래스<List> - LinkedList (0) | 2020.10.21 |
[days22] 컬렉션 클래스<List> - ArrayList와 Vector +열거자와 반복자 (0) | 2020.10.21 |
Comments