집합 프레임 워 크 (4) - Collection 부분 집합 - Set 과 그의 동생 들!
HashSet
TreeSet
HashSet - 바 텀 데이터 구 조 는 해시 표 로 순 서 를 보장 하지 않 고 동기 화 되 지 않 습 니 다.
해시 표: 요소 의 자체 특징 에 따라 어떤 위치 에 저장 해 야 하 는 지 확인 합 니 다.
위 치 는 어떻게 정 하 죠?해시 알고리즘.
해시 표 의 유래: 조회 속 도 를 높 인 다.
[해시 표 는 저 장 된 요소 의 유일 성 을 어떻게 보장 합 니까?]
해시 표 가 똑 같이 충돌 할 때 두 요소 의 위치 가 같다 는 것 을 설명 하고 두 요소 의 내용 을 다시 비교 합 니 다.equals 로 내용 의 비 교 를 완성 하 다.
equals 가 true 로 돌아 오 면 같은 요소 로 보고 저장 하지 않 습 니 다.false 로 되 돌아 가면 서로 다른 요소 로 저장 합 니 다.
[해시 값 과 메모리 주소 의 차이]
해시 값 은 해시 알고리즘 을 통 해 계 산 된 저장 위치 입 니 다. 해시 값 이 같 으 면 equals 를 판단 합 니 다. 그렇지 않 으 면 저장 하지 않 습 니 다.
메모리 주소: 메모리 의 실제 주소 입 니 다.
[어떻게 해시 표 에 사용자 정의 대상 을 저장 합 니까?]
hashCode 방법 과 equals 방법 을 덮어 써 야 합 니 다.
[이 대상 이 도대체 그 용기 에 저장 되 어 있 는 지 모 를 때 어떻게 해 야 하나 요?]
hashCode, equals, toString 을 모두 덮어 씁 니 다.덮어 쓰 지 않 아 도 Object 에서 물 려 받 습 니 다.
HashSetDemo.java
【TreeSet】
Set 집합 에 있 는 요 소 를 지정 한 방식 으로 정렬 할 수 있 습 니 다. 기본적으로 자연 순 서 를 사용 합 니 다.
[자연 순서 란 무엇 인가!]
TreeSet 정렬 방법 1: 자연 정렬
요소 자체 가 갖 춘 비교 성 은 Comparable 인터페이스의 compare To 방법 을 실현 했다.
[연습] TreeSetDemo. java
package day0916;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet ts = new TreeSet();
ts.add("xixi");
ts.add("jfkk");
ts.add("jdfiew");
ts.add("xnncixi");
ts.add("wejkllkxi");
ts.add("iiweu");
for(Iterator it =ts.iterator(); it.hasNext();){
System.out.println(it.next());
}
}
}
TreeSet 정렬 방법 2: TreeSetTest. java 비교 기 정렬
원소 자체 가 비교 성 을 갖 추 지 못 하거나 갖 춘 비교 성 (자연 순서) 이 필요 하지 않다 면.이 럴 때 는 두 번 째 방법 만 쓸 수 있다.
용기 자체 가 비교 성 을 갖 도록 하 다.용기 가 초기 화 되 자마자 비교 기능 을 갖 추 었 다.용 기 는 대상 구조 때 완성 되 기 때문이다.트 리 셋 (Comparator) 을 통 해 용기 초기 화 시 비교 기 를 지정 할 수 있 습 니 다.Comparator 인 터 페 이 스 를 실현 하고 compare 방법 을 덮어 쓰 면 됩 니 다.그래서 이런 방식 은 비교 기 정렬 이 된다.
[연습] - TreeSetTest. java
package cn.itcast.api.p1.set.demo;
import java.util.Iterator;
import java.util.TreeSet;
import cn.itcast.api.p2.comparator.ComparatorByName;
import cn.itcast.bean.Person;
public class TreeSetDemo {
/**
* @param args
*/
public static void main(String[] args) {
/*
* TreeSet: , 。
* : Comparable compareTo
*
*
*/
TreeSet ts = new TreeSet(new ComparatorByName());// 。
ts.add(new Person("lisi1",20));
ts.add(new Person("lisi7",28));
ts.add(new Person("lisi9",22));
ts.add(new Person("lisi3",21));
ts.add(new Person("lisi5",26));
Iterator it = ts.iterator(); // TreeSet
while(it.hasNext()){
System.out.println(it.next().toString());
}
}
}
package cn.itcast.api.p2.comparator;
import java.util.Comparator;
import cn.itcast.bean.Person;
/**
* Person Name 。
* @author Administrator
*
*/
public class ComparatorByName extends Object implements Comparator {
@Override
public int compare(Object o1, Object o2) {
Person p1 = (Person)o1;
Person p2 = (Person)o2;
int temp = p1.getName().compareTo(p2.getName());
return temp==0?p1.getAge()-p2.getAge():temp;
}
}
package cn.itcast.bean;
/*
* Person 。
* person 。
* Person Comparable 。 Person 。 compareTo 。
*
*/
public class Person implements Comparable {
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
/**
* Object hashCode 。 Person 。
*/
public int hashCode(){
final int NUMBER = 27;
return name.hashCode() + age*NUMBER;//*27 。
}
/**
* Object equals , Person 。
* 。 Person 。
*/
public boolean equals(Object obj){
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return name+":"+age;
}
@Override
public int compareTo(Object o) {
/*
* Person 。 。
*/
/*
* , , , , 。
* , , 。
*/
// 。
// Person p = (Person)o;
// if(this.age>p.age)
// return 1;
// if(this.age==p.age)
// return this.name.compareTo(p.name);
// return -1;
// 。
Person p = (Person)o;
int temp = this.age - p.age;
return temp==0?this.name.compareTo(p.name):temp;
}
}
[대상 비교 시]
일반적으로 주요 조건 을 먼저 비교 하고, 주요 조건 이 같 으 면 부차적인 조건 을 비교한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.