집합 - treeMap 상세 해석 과 TreeSet 상세 해석 및 이들 의 차이 점
검 붉 은 나무 특성:
특징:
TreeMap 은 비 스 레 드 가 안전 합 니 다. 그러나 다음 과 같은 방식 으로 스 레 드 안전 으로 설정 할 수 있 습 니 다.
Map m=Collections.synchronizedSortedMap(new TreeMap()); ;
TreeMap 은 키 로 정렬 되 어 있 으 며, 기본적으로 오름차 순 으로 정렬 됩 니 다.Comparable 또는 Comparator 를 통 해 정렬 하기;TreeMap 은 SortedMap 인터페이스 가 붉 은 검 은 나 무 를 기반 으로 한 것 입 니 다.이 는 맵 이 오름차 순 으로 키 워드 를 배열 하 는 것 을 보장 합 니 다. 사용 하 는 구조 방법 에 따라 키 의 자 연 스 러 운 순서 로 정렬 하거나 만 들 때 제공 하 는 비교 기 (사용자 정의) 에 따라 정렬 할 수 있 습 니 다.
값 중복 허용, 키 중복 허용 하지 않 음;
키 는 null (비교 기 가 null 을 처리 하면 null 일 수 있 습 니 다) 이 고 값 은 null 일 수 있 습 니 다.
TreeMap 의 응용:
사용자 정의 정렬:
Map<Integer,Integer> map = new TreeMap<>();
map.put(1, null);
map.put(10, 1);
map.put(3, 2);
map.put(2, 3);
for(Map.Entry<Integer, Integer> entry:map.entrySet())
{
System.out.println(entry.getKey()+":"+entry.getValue());
}
//
// 1:null
// 2:3
// 3:2
// 10:1
Comparable 정렬: 사용자 정의 클래스 가 Comparable 인 터 페 이 스 를 실현 하면 정렬 이 가능 합 니 다.
public class Person1 implements Comparable<Person1>
{
private int age;
private String name;
public Person1(String name, int age)
{
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person1 o)
{
return this.age-o.age;
}
@Override
public String toString()
{
return name+":"+age;
}
}
public class TreeMapDemo{
public static void main(String [] args){
Map<Person1,Integer> map = new TreeMap<>();
Person1 person1 = new Person1("zzh",18);
Person1 person2 = new Person1("jj",17);
Person1 person3 = new Person1("qq",19);
map.put(person1, 1);
map.put(person2, 2);
map.put(person3, 3);
for(Entry<Person1, Integer> entry:map.entrySet()){
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
}
// :
//jj:17:2
//zzh:18:1
//qq:19:3
Comparator 정렬: TreeMap 을 만 드 는 구조 함수 에서 Comparator 인터페이스의 실현 을 설명 하기 만 하면 됩 니 다
public final class Person2
{
private int age;
private String name;
public Person2(String name, int age)
{
this.name = name;
this.age = age;
}
@Override
public String toString()
{
return name+":"+age;
}
}
public class TreeMapDemo{
public static void main(String [] args){
Map<Person2,Integer> map2 = new TreeMap<>(new Comparator<Person2>(){
@Override
public int compare(Person2 o1, Person2 o2)
{
if(o1 == null || o2 == null)
return 0;
return o1.getAge()-o2.getAge();
}
});
Person2 p1 = new Person2("zzh",18);
Person2 p2 = new Person2("jj",17);
Person2 p3 = new Person2("qq",19);
map2.put(p1, 1);
map2.put(p2, 2);
map2.put(p3, 3);
for(Entry<Person2, Integer> entry:map2.entrySet())
{
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
}
// :
//jj:17:2
//zzh:18:1
//qq:19:3
HashMap 과 TreeMap 의 차이 점:
실현 방식
HashMap: 해시 표를 바탕 으로 이 루어 집 니 다.HashMap 에서 요구 하 는 키 클래스 를 사용 하여 HashCode () 와 equals () 방법 (이 두 가지 방법 을 다시 쓸 수 있 음) 을 명 확 히 정 의 했 습 니 다. HashMap 공간의 사용 을 최적화 하기 위해 초기 용량 과 부하 인 자 를 조정 할 수 있 습 니 다.
TreeMap: 붉 은 검 은 나 무 를 기반 으로 이 루어 집 니 다.트 리 맵 은 트 리 가 항상 균형 상태 에 있 기 때문에 옵션 을 조정 하지 않 았 습 니 다.
용도:
HashMap: 맵 에 요 소 를 삽입 하고 삭제 하 며 포 지 셔 닝 하 는 데 적 용 됩 니 다.
TreeMap: 자연 순서 나 사용자 정의 순서 로 키 (key) 를 옮 겨 다 니 는 데 적 용 됩 니 다.
HashMap 은 보통 TreeMap 보다 빠 릅 니 다 (수 와 해시 표 의 데이터 구조 때 문 입 니 다). HashMap 을 많이 사용 하고 정렬 할 때 TreeMap 을 사용 하 는 것 을 권장 합 니 다.
containsKey 방법 이 다 르 기 때문에 HashMap 은 equals () 방법 으로 비교 하고 TreeMap 은 비교 기 를 사용 하여 비교 하 며 이들 의 차이 가 0 이면 이들 이 같다 고 판단 한다.
TreeSet: TreeSet 은 TreeMap 에 대한 패 키 징 을 실 현 했 고 응용 방법 은 모두 같 습 니 다.값 은 모두 new Object ();키 중복 불가;
TreeSet 정렬 은 TreeMap 과 마찬가지 로 Comparator 비교 기 정렬 방식 만 알려 줍 니 다.
package collection.Map;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
/**
* @Created with IntelliJ IDEA
* @Description:
* @Package: collection.Map
* @author: FLy-Fly-Zhang
* @Date: 2019/2/27
* @Time: 19:38
*/
class Preson{
int val;
String s;
}
public class TreeMapDemo {
public static void main(String[] args) {
//Comparator
TreeMap<Preson,Integer> treeMap=new TreeMap<>(new Comparator<Preson>() {
@Override
public int compare(Preson o1, Preson o2) {
return 0;
}
});
// map
Iterator<Map.Entry<Preson,Integer>> iterator=treeMap.entrySet().iterator();
Iterator iterator1=treeMap.keySet().iterator();
Iterator iterator2=treeMap.values().iterator();
}
}
두 가 지 는 주로 다르다. 응용 장면 이 다 르 기 때문에 TreeSet 의 응용 장면 은 key 값 을 다시 추가 하고 key 값 을 정렬 하 는 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Dubbo (2): zookeeper 등록 센터Zookeeper 는 Apacahe Hadoop 의 하위 프로젝트 로 트 리 형태의 디 렉 터 리 서비스 로 푸 시 변경 을 지원 하 며 Dubbo 서비스의 등록 센터 로 적합 하 며 산업 강도 가 높 아 생산 환경...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.