ホームページ  >  記事  >  Java  >  Java Mapのキーによるソートと値によるソートの実装方法

Java Mapのキーによるソートと値によるソートの実装方法

高洛峰
高洛峰オリジナル
2017-01-19 09:42:181592ブラウズ

1. 理論的な準備

Map はキーと値のペアのコレクション インターフェイスであり、その実装クラスには主に HashMap、TreeMap、Hashtable、LinkedHashMap などが含まれます。

TreeMap: Red-Black ツリーに基づく NavigableMap 実装。キーの自然な順序に従って、または使用されるコンストラクターに応じて、マップの作成時に提供される Comparator に従ってソートされます。

HashMap の値は順序がありません。キーの HashCode に従って実装されます。この順序のない HashMap のソートをどのように実装すればよいでしょうか。 TreeMapの値ソートを参照してください。

Map.Entry はコレクション ビューを返します。

2. キーの並べ替え

ツリーマップの並べ替え方法を変更する必要がある場合は、コンパレータを使用する必要があります。 Comparator は、コレクション オブジェクトまたは配列をソートできるコンパレータ インターフェイスです。このインターフェイスの public Compare(T o1, To2) メソッドを実装すると、次のようにソートを実行できます。

import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
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("b", "ccccc");
    map.put("d", "aaaaa");
    map.put("c", "bbbbb");
    map.put("a", "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));
    }
  }
}

実行結果は次のとおりです。並べ替え

上の例は TreeMap のキー値に基づいて並べ替えていますが、TreeMap の値に基づいて並べ替える必要がある場合もあります。値を並べ替えるには、Collections の sort(List8742468051c85b06f0a0af9e3e506b5c list, Comparator117c5a0bdb71ea9a9d0c2b99b03abe3e c) メソッドを使用する必要があります。これは、指定されたコンパレータによって生成された順序に従って、指定されたリストを並べ替えます。ただし、前提条件があります。つまり、次のように、すべての要素が提供されたコンパレーターに従って比較される必要があります:

d:aaaaa
c:bbbbb
b:ccccc
a:ddddd

実行結果は次のとおりです:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
public class TreeMapTest {
  public static void main(String[] args) {
    Map<String, String> map = new TreeMap<String, String>();
    map.put("a", "ddddd");
    map.put("c", "bbbbb");
    map.put("d", "aaaaa");
    map.put("b", "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()); 
     } 
  }
}

上記の Java Map はキーでソートされ、値でソートされます。実装方法はすべて編集者が共有した内容ですので、ご参考になれば幸いです、また皆さんもPHP中国語サイトを応援していただければ幸いです。

キーによるソートと値によるソートのその他の Java Map 実装方法については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。