ホームページ >Java >&#&チュートリアル >4 つの主要なマップ実装クラス
map はキーと値のペアのコレクション インターフェイスであり、その実装クラスには主に HashMap、TreeMap、Hashtable、LinkedHashMap などが含まれます。 4 つの違いは次のとおりです (簡単に説明します):
HashMap: 最も一般的に使用される Map、HashMap の値は次のとおりです。順序ではありません はい、キーの HashCode に従って実装されます、つまり、データはキーの HashCode 値に従って格納されます。その値はキーに従って直接取得でき、非常に高速にアクセスできます。スピード。 HashMap では、1 つのレコードのキー値を Null にすることのみが許可されます (複数のレコードは上書きされます)。複数のレコードの値を Null にすることは許可されます。非同期。
TreeMap: 保存したレコードをキーに従って並べ替えることができます。デフォルトは昇順です。並べ替えコンパレータを指定することもできます。Iterator を使用して TreeMap を走査すると、取得されたレコードが並べ替えられています。順不同です。 TreeMap では、キー値を null にすることはできません。非同期。
Hashtable: HashMap と似ていますが、キーも値も null にできない点が異なり、スレッド同期をサポートしています。つまり、一度に 1 つのスレッドだけが Hashtable に書き込むことができます。 , Hashtale は書き込みが遅くなりますが、hashtable のみ Dictionary 抽象クラスを継承し、hashMap とtreeMap は両方とも AbstractMap 抽象クラスを継承し、LinkedHashMap は hashMap を継承します。
LinkedHashMap: レコードの挿入順序を保存します。Iterator を使用して LinkedHashMap を走査する場合、最初に取得したレコードを最初に挿入する必要があります。走査中は HashMap よりも遅くなります。キーと値は両方とも空で非同期にすることができます。
常識:
コレクションとマップ コレクションはオブジェクトから継承しますか?
いいえ、どちらもインターフェイスであり、Object はクラスです。Object からどのように継承できますか? 詳細については、java.util の特定のインターフェイスを参照してください。
2. マップの並べ替え
TreeMap
TreeMap はデフォルトでは昇順になっていますが、並べ替え方法を変更する必要がある場合は、コンパレータ Comparator を使用する必要があります。
Comparator は、コレクション オブジェクトまたは配列を並べ替えることができるコンパレータ インターフェイスです。このインターフェイスの public Compare(T o1, To2) メソッドを実装すると、並べ替えを実現できます。このメソッドは主に最初のパラメータ o1 に基づいています。 o2 より小さい、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)); } } }
上の例は TreeMap のキー値に基づいて並べ替えていますが、TreeMap の値に基づいて並べ替える必要がある場合もあります。値を並べ替えるには、Collections の sort(List8742468051c85b06f0a0af9e3e506b5c list, Comparator117c5a0bdb71ea9a9d0c2b99b03abe3e 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 値を持っており、キーの HashCode に従って実装されます。この順序付けされていない HashMap のソートをどのように実装すればよいでしょうか? TreeMap の値のソートを参考にして、HashMap のソートも実装できます。
rree以上が4 つの主要なマップ実装クラスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。