👨💻Programming/JAVA & C언어 예제
자바 - Java 컬렉션 : HashSet 예제 풀이
반응형
HashSet 예제 풀이
(1) 일반 배열 값 넣기 ( 자료형 다양하게 ) , HashSet에 배열을 담기.
(2) Student 클래스를 만들고 HashSet에 값을 넣고 출력하기.
(학교명, 학번, 번호)
소스 코드
public class HashSetEx02 {
public static void main(String[] args) {
// 배열 값 넣기 - 자료형 다양한 것
Object[] objArr = { 1, 1.1, "a", 'a', true, "a", 1 };
// onjArr의 배열에 있는 것을 HashSet에 넣기
HashSet hashset = new HashSet(Arrays.asList(objArr));
//asList를 사용하여 for문으로 담지 않아도 된다.
// objArr의 배열에 있는 것을 HashSet에 넣기
Set h = new HashSet();
for (int i = 0; i < objArr.length; i++) {
h.add(objArr[i]);
}
System.out.println(hashset);
System.out.println(h);
//출력하기
Iterator it = h.iterator();
while(it.hasNext()) {
Object o = it.next();
System.out.println(o);
}
// a는 문자열 2개라서 중복을 제거하여 1개만 나옴
// 'a' char 문자형은 문자열과는 다르기 때문에 중복이라고 볼 수 없다.
// 즉 문자열 a와 문자형 a가 있는 것이다.
}
}
class Person {
String name;
int age; // 이름과 나이를 넣어줌
public Person() {
} // default 생성자 하나주고
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
// 요구사항에 따라서 같은 사람을 판단할 기준으로 hashCode() equals() 메소드로 구현해준다.
@Override
public int hashCode() {
return (name+age).hashCode();
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Person) {
Person p = (Person) obj;
return name.equals(p.name) && age==p.age;
// 들어올 이름이 홍길동이냐, 들어올 나이가 30이냐. 두개가 참이여야지 참이다.
}
return false; // 다른 객체, false 리턴
}
}
public class HashSetEx04 {
public static void main(String[] args) {
// 사용자 만든 클래스의 멤버들을 Set넣기
Set<Person> set = new HashSet<Person>(); // person 클래스 참조변수로 담는다.
set.add(new Person("홍길동", 30));
set.add(new Person("할명수", 51)); // add에 person 객체 생성하면서 값 삽입
Person p1 = new Person("김수지", 14);
set.add(p1); // 같은것이다.
set.add(new Person("홍길동", 30));
// 홍길동,30이 같은 값을 가져있는데도 불구하고 중복이 저장되어 출력이 잘 나온다.
// ==> 번지(레퍼런스) 수가 다르기 때문에 중복이라고 볼 수 없다고 하는것이다.
// char 'a' 와 String "a" 와 같은 경우이다.
// ==> equals와 hashcode를 override 하게되면 중복을 찾을 수 있다.
Set<String> string = new HashSet<String>(); //
string.add("홍길동");
string.add("홍길동");
string.add(new String("홍길동"));
System.out.println(string);
// 기본형(data type),String 같은 자료타입은 같은 번지를 참조하고 있기 때문에 중복을 제거한다.
// 클래스의 경우 레퍼런스가 계속 생성 되기 때문에 같은 번지를 참조할 수 없다.고 생각하면 될 듯 하다.
System.out.println(set);
Iterator<Person> it = set.iterator();
while (it.hasNext()) {
Person po = it.next();
System.out.println(po);
}
}
class Student{
String school; // 학교
int snum; // 학번
int num; // 번호
public Student() { }
public Student(String school, int snum, int num ) {
this.school=school; this.snum=snum; this.num=num;
}
@Override
public String toString() {
return "Student [학교=" + school + ", 학번=" + snum + ", 번호=" + num + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + num;
result = prime * result + ((school == null) ? 0 : school.hashCode());
result = prime * result + snum;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (num != other.num)
return false;
if (school == null) {
if (other.school != null)
return false;
} else if (!school.equals(other.school))
return false;
if (snum != other.snum)
return false;
return true;
}
}
public class HashSetEx03 {
public static void main(String[] args) {
//--------------------- Student
Set<Student> stu = new HashSet<Student>();
stu.add(new Student("서울대", 2018, 10));
stu.add(new Student("서울대", 2018, 20));
stu.add(new Student("서울대", 2018, 15));
stu.add(new Student("서울대", 2018, 10));
stu.add(new Student("아주대", 2020, 30));
stu.add(new Student("아주대", 2020, 30));
stu.add(new Student("아주대", 2020, 30));
stu.add(new Student("고려대", 2019, 10));
stu.add(new Student("고려대", 2019, 10));
// ----- 출력
Iterator<Student> itstu = stu.iterator();
while(itstu.hasNext() ) {
Student objStu = itstu.next();
System.out.println(objStu);
}
}
}
반응형
'👨💻Programming > JAVA & C언어 예제' 카테고리의 다른 글
자바(Java) - HashSet 을 이용해 로또 프로그램 만들기 (0) | 2020.12.09 |
---|---|
JAVA- 응용SW 기초기술 활용 TEST - 코딩 테스트 시험 2차 (0) | 2020.11.29 |
JAVA (자바) - 클래스 연습 문제 모음 - (1) (0) | 2020.11.19 |
JAVA (자바) - 상속과 메소드 오버라이딩을 이용한 예제 만들기 - 스타크래프트 유닛 x,y좌표 이동시키기 (0) | 2020.11.19 |
JAVA(자바) - 프로그래밍 언어 활용 테스트 시험 (0) | 2020.11.14 |
댓글