javaSE - 007 - 집합
컬렉션:
3. Set(반복 불가, 순서 없는 집합)
hash code 및 equals
순전히 억측에 속한다.다음과 같습니다.hash 코드는 메모리의 물리적 주소를 빨리 찾을 수 있습니다.서로 다른 대상은 같은hashcode가 있을 수 있지만 서로 다른hashcode는 반드시 다른 두 대상이다.두 번째에 따르면 equals를 비교할 수 있다. 먼저 같은hashcode가 있어야 한다.equals를 다시 쓰려면hashCode의 표현을 다시 써야 한다. 만약에 equals만 다시 쓰려면,hashcode를 다시 쓰지 않으면, 코끼리는 코끼리 더미와 비교하기만 하면 단락이 생기기 쉽다.
public class test {
public static void main(String[] args) {
Sets = new HashSet();
A a1= new A("liyang","26");
A a2= new A("liyang","21");
A a3= new A("liyang","22");
A a4= new A("liyang","23");
A a5= new A("liyang","26");
s.add(a1);
s.add(a2);
s.add(a3);
s.add(a4);
s.add(a5);
System.out.println(s);
}
}
class A{
String name ;
String age;
A(String name, String age){
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
System.out.println(this.name + " hashcode " + this.age);
return this .age.hashCode();
}
@Override
public boolean equals(Object obj) {
System.out.println(this.name + " equals " + this.age);
A other = (A) obj;
return other.name.equals(this.name);
}
}
결과 출력:
liyang hashcode 26
liyang hashcode 21
liyang hashcode 22
liyang hashcode 23
liyang hashcode 26
liyang equals 26
다음은 System입니다.out.println(s);초래했어
liyang hashcode 22
liyang hashcode 23
liyang hashcode 26
liyang hashcode 21
[javaSEtest.A@640, javaSEtest.A@641, javaSEtest.A@644, javaSEtest.A@63f]
총괄: 원래 equals는'liyang'문자열로만 비교했고 완전히 같았지만 우리는hashcode로 나이가 생겨서 단락이 생겼다. equals 방법을 전혀 쓰지 않는다. 나이가 같은 것을 제외하고는.
집합 교체
Set s = **new** HashSet();
s.add("liyang");
s.add("liyang1");
s.add("liyang2");
s.add("liyang3");
s.add("liyang4");
Iterator i = s.iterator();
while (i.hasNext()){
System.out.println(i.next());
}
}
Comparable 커넥터
public class test {
public static void main(String[] args) {
Set s = new TreeSet();
s.add(new Person(12));
s.add(new Person(13));
s.add(new Person(14));
s.add(new Person(1));
s.add(new Person(123));
Iterator i = s.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
}
class Person implements Comparable {
int score;
Person(int score){
this.score = score;
}
@Override
public int compareTo(Object o) {
Person p = (Person) o;
if (this.score > p.score) {
return 1;
} else if (this.score == p.score) {
return 0;
} else {
return -1;
}
}
public String toString(){
return ""+this.score;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.