> Java > java지도 시간 > 본문

Java에서 지도 정렬 구현

王林
풀어 주다: 2019-11-29 13:34:07
앞으로
2677명이 탐색했습니다.

Java에서 지도 정렬 구현

map은 키-값 쌍의 컬렉션 인터페이스입니다. 구현 클래스에는 주로 HashMap<span style="font-family:Microsoft Yahei, Hiragino Sans GB, Helvetica, Helvetica Neue, åž®è½́가 포함됩니다. é ›…é»', Tahoma, Arial, sans-serif">, </span>TreeMap<span style="font-family:Microsoft Yahei, Hiragino Sans GB, Helvetica, Helvetica Neue, å¼ ®è½̆é≥…é»', Tahoma, Arial, sans-serif">, </span>HashtableLinkedHashMap 등 네 가지의 차이점은 다음과 같습니다(간단한 소개): HashMap<span style="font-family:Microsoft Yahei, Hiragino Sans GB, Helvetica, Helvetica Neue, 微软雅黑, Tahoma, Arial, sans-serif">、</span>TreeMap<span style="font-family:Microsoft Yahei, Hiragino Sans GB, Helvetica, Helvetica Neue, 微软雅黑, Tahoma, Arial, sans-serif">、</span>Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):

HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null。非同步的。

TreeMap: 能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。

Hashtable: 与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。

LinkedHashMap: 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。

在线学习课程分享:java课程

Map排序

TreeMap

TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator
HashMap: 가장 일반적으로 사용되는 맵으로, 키의 HashCode 값에 따라 데이터를 저장합니다. 해당 값은 다음을 기반으로 직접 얻을 수 있습니다. 동시에 빠른 액세스 속도를 가지고 있습니다. HashMap은 한 레코드의 키 값만 Null이 되도록 허용합니다(여러 레코드를 덮어쓰게 됨). 여러 레코드의 값이 Null이 되도록 허용합니다. 비동기식.

TreeMap: 키에 따라 저장하는 레코드를 정렬할 수 있습니다. 기본값은 오름차순입니다. 또한 Iterator를 사용하여 TreeMap을 탐색할 때 얻은 레코드가 정렬됩니다. . TreeMap은 키 값이 null이 되는 것을 허용하지 않습니다. 비동기식.

Hashtable: HashMap과 유사하지만 차이점은 키나 값 모두 null이 될 수 없다는 것입니다. 즉, 스레드 동기화를 지원합니다. 즉, 언제든지 하나의 스레드만 Hashtable에 쓸 수 있습니다. 또한 쓰기 시 Hashtale이 느려질 수 있습니다.

LinkedHashMap: Iterator를 사용하여 LinkedHashMap을 순회하는 경우 먼저 얻은 레코드가 순회 중에 반드시 먼저 삽입됩니다. 키와 값은 모두 비어 있고 비동기적으로 허용됩니다. Java에서 지도 정렬 구현

온라인 학습 강좌 공유: java 강좌

Map sorting

Java에서 지도 정렬 구현TreeMap

TreeMap은 기본적으로 오름차순입니다. 정렬 방법을 변경해야 하는 경우 비교기(Comparator)를 사용해야 합니다. >.

Comparator는 컬렉션 개체 또는 배열을 정렬할 수 있는 비교기 인터페이스입니다. 이 인터페이스의 공개 비교(T o1, To2) 메서드를 구현하면 이 메서드는 주로 첫 번째 매개 변수 o1을 기반으로 합니다. o2와 같거나 크면 각각 음의 정수, 0 또는 양의 정수를 반환합니다.

public class TreeMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<String, String>(
                new Comparator<String>() {
                    public int compare(String obj1, String obj2) {
                        // 降序排序
                        return obj2.compareTo(obj1);
                    }
                });
        map.put("c", "ccccc");
        map.put("a", "aaaaa");
        map.put("b", "bbbbb");
        map.put("d", "ddddd");
 
        Set<String> keySet = map.keySet();
        Iterator<String> iter = keySet.iterator();
        while (iter.hasNext()) {
            String key = iter.next();
            System.out.println(key + ":" + map.get(key));
        }
    }
}
로그인 후 복사

실행 결과는 다음과 같습니다.

Java에서 지도 정렬 구현

위 예에서는 TreeMap의 키 값을 기준으로 정렬했지만 때로는 TreeMap의 값을 기준으로 정렬해야 하는 경우도 있습니다. 값을 정렬하려면 지정된 비교기에 의해 생성된 순서에 따라 지정된 목록을 정렬하는 Collections의 sort(List list, Comparator c) 메서드를 사용해야 합니다. 하지만 전제 조건이 있습니다. 즉, 제공된 비교기에 따라 모든 요소를 ​​비교할 수 있어야 합니다. 다음과 같습니다:

public class TreeMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<String, String>();
        map.put("d", "ddddd");
        map.put("b", "bbbbb");
        map.put("a", "aaaaa");
        map.put("c", "ccccc");
 
        //这里将map.entrySet()转换成list
        List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
        //然后通过比较器来实现排序
        Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
            //升序排序
            public int compare(Entry<String, String> o1,
                    Entry<String, String> o2) {
                return o1.getValue().compareTo(o2.getValue());
            }
 
        });
 
        for(Map.Entry<String,String> mapping:list){ 
               System.out.println(mapping.getKey()+":"+mapping.getValue()); 
          } 
    }
}
로그인 후 복사
🎜작업 결과🎜🎜🎜🎜🎜🎜HashMap🎜🎜🎜우리 모두는 순서가 맞지 않은 HashMap 값을 가지고 있습니다. 이는 키의 HashCode에 따라 구현됩니다. 정렬되지 않은 HashMap에 대한 정렬을 어떻게 구현합니까? TreeMap의 값 정렬을 참조하면 HashMap의 정렬도 구현할 수 있습니다. 🎜
public class HashMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("c", "ccccc");
        map.put("a", "aaaaa");
        map.put("b", "bbbbb");
        map.put("d", "ddddd");
 
        List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
        Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
            //升序排序
            public int compare(Entry<String, String> o1,
                    Entry<String, String> o2) {
                return o1.getValue().compareTo(o2.getValue());
            }
 
        });
 
        for(Map.Entry<String,String> mapping:list){ 
               System.out.println(mapping.getKey()+":"+mapping.getValue()); 
          } 
     }
}
로그인 후 복사
🎜실행 결과:🎜🎜🎜🎜🎜더 많은 관련 기사 튜토리얼 권장 사항: 🎜Java 시작하기🎜🎜

위 내용은 Java에서 지도 정렬 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿