Set 인터페이스 구현 클래스
클래스 HashSet 구현
//******************************HashSet에 사용자 정의 객체 추가
public class Student {
private int age;
private String name;
// get/set
public Student(int age,String name){
this.age = age;
this.name = name;
}
// Student , toString
public String toString(){
return "age:"+age+"name:"+name;
}
// Java , equals() , hashCode()
// equals , true, hashCode 。
public int hashCode(){
return age*name.hashCode();
}
//HashSet hashCode() equals()
@Override
public boolean equals(Object obj) {
Student s = (Student)obj; //
return age==s.age && name.equals(s.name);
}
}
주석:
Set 집합에 중복된 요소를 추가할 수 없기 때문에 사용자 정의 클래스에 대해 어떻게 중복된 요소를 계산할 수 있는지 판단하는 방법을 제공해야 한다.코드의hashCode()와 equals() 방법은 Student 대상이 중복 대상인지 아닌지를 판단하는 표준 방법이다.만약 두 대상이 같다면, 그들의 hashCode 값은 반드시 같을 것이다.
import java.util.HashSet;
import java.util.Iterator;
public class SelfHashSetTest {
public static void main(String args[]){
HashSet hs = new HashSet();
//
hs.add(new Student(28,"zah"));
hs.add(new Student(31,"xmh"));
hs.add(new Student(30,"zyj"));
//
hs.add(new Student(28,"zah"));
hs.add(new Student(31,"xmh"));
// null
hs.add(null);
hs.add(null);
//
Iterator it = hs.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
실행 결과
null
age:31name:xmh
age:33name:zxx
age:30name:zyj
age:28name:zah
실행 결과에 의하면 HashSet은 null 요소를 추가할 수 있지만 중복된 요소는 하나만 추가할 수 있습니다.
클래스 LinkedHashSet 구현
링크드 HashSet 클래스는 원소의 해시에 따라 저장하고 체인표로 원소의 가입 순서를 기록합니다.
public class Student {
private int age;
private String name;
// get/set
public Student(int age,String name){
this.age = age;
this.name = name;
}
// Student , toString
public String toString(){
return "age:"+age+"name:"+name;
}
// Java , equals() , hashCode()
// equals , true, hashCode 。
public int hashCode(){
return age*name.hashCode();
}
//HashSet hashCode() equals()
@Override
public boolean equals(Object obj) {
Student s = (Student)obj; //
return age==s.age && name.equals(s.name);
}
}
import java.util.Iterator;
import java.util.Set;
import java.util.LinkedHashSet;
public class LinkedHashSetTest {
public static void main(String args[]){
Set linkHashSet = new LinkedHashSet();
Student stu1 = new Student(18,"zxx");
Student stu2 = new Student(23,"zyj");
Student stu3 = new Student(25,"xmh");
Student stu4 = new Student(25,"zah");
Student stu5 = new Student(25,"zah");
linkHashSet.add(stu3);
linkHashSet.add(stu4);
linkHashSet.add(stu1);
// HashCode ,
linkHashSet.add(stu2);
linkHashSet.add(stu5);
linkHashSet.add(null);
Iterator it = linkHashSet.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
실행 결과
age:25name:xmh
age:25name:zah
age:18name:zxx
age:23name:zyj
null
Process finished with exit code 0
참고:
체인 테이블을 통해 대상을 저장하는데 일반적으로 삽입과 삭제 효율이 비교적 높고 검색 효율이 상대적으로 낮다.
구현 클래스 TreeSet
public class Student1 {
private Integer age;
private String name;
private Integer score;
Student1(int age,String name,int score){
this.age = age;
this.name = name;
this.score = score;
}
public String toString(){
return "age:"+age+"name:"+name+"score:"+score;
}
public int hashCode(){
return age*name.hashCode();
}
public boolean equals(Object o){
Student1 s = (Student1)o;
return age==s.age && name.equals(s.name);
}
public int getAge() {
return age;
}
public Integer getScore() {
return score;
}
}
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
// class
class StudentAgeComparetor implements Comparator<Student1> {
@Override
public int compare(Student1 o1, Student1 o2) {
int i = o2.getAge()-o1.getAge();
return i;
}
}
// class
class StudentScoreComparator implements Comparator<Student1> {
@Override
public int compare(Student1 o1, Student1 o2) {
int i = (int) (o2.getScore()-o1.getScore());
return i;
}
}
public class SelfTreeSetTest {
public static void main(String args[]){
// TreeSet
Set ts = new TreeSet(new StudentAgeComparetor());
Student1 stu1 = new Student1(18,"zxx",85);
Student1 stu2 = new Student1(23,"zyj",81);
Student1 stu3 = new Student1(26,"xmh",92);
Student1 stu4 = new Student1(25,"zah",76);
ts.add(stu3);
ts.add(stu4);
ts.add(stu1);
ts.add(stu2);
Iterator it = ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
실행 결과
age:26name:xmhscore:92
age:25name:zahscore:76
age:23name:zyjscore:81
age:18name:zxxscore:85
Process finished with exit code 0
참고:
점수 선택기를 선택하면 코드 Set ts = new TreeSet (new Student Age Comparetor () 를 Set ts = new TreeSet (new Student Score Comparetor () 로 변경하면 됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.