>  기사  >  Java  >  Java에서 지도 정렬 구현

Java에서 지도 정렬 구현

王林
王林앞으로
2019-11-29 13:34:072571검색

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 super T> 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으로 문의하시기 바랍니다. 삭제