ここでは、マップ値によるソートを含む、リスト、セット、マップの並べ替えについて説明します。
1)並べ替えをリストします
リストソーティングは、コレクションの種類の方法、または配列の一種の方法を直接使用できます。最終分析では、コレクションは配列の種類の方法を呼び出すことです。
public static <t> void sort(list <t> list、comparator <?super t> c){object [] a = list.toarray(); arrays.sort(a、(Comparator)c); listiterator i = list.listiterator(); for(int j = 0; j <a.length; j ++){i.next(); i.set(a [j]); }}カスタムオブジェクトの場合、オブジェクト自体が「比較」の機能を持つように、同等のインターフェイスを実装する必要があります。もちろん、外部からコンパレータを使用してソートを指定することもできます。
例えば:
パッケージcom.fox; /** * @author huangfox * @desc */public class user explmestion comparable <user> {private string name;プライベートインクエイジ; public user(){} public user(string name、int age){super(); this.name = name; this.age = age; } @Override public String toString(){return "name:" + name + "、age:" + age; } public string getname(){return name; } public void setName(string name){this.name = name; } public int getage(){return age; } public void Setage(int age){this.age = age; } @Override public int compareto(user o){if(o.age <this.age)return 1; else if(o.age> this.age)return -1;それ以外の場合は0を返します。 } / ** * @param args * / public static void main(string [] args){user u1 = new user( "fox"、11);ユーザーu2 = new user( "fox2"、21); System.out.println(u2.compareto(u1)); }}並べ替え:
// list <user> us = new ArrayList <user>(); list <user> us = new linkedlist <user>(); us.add(new user( "f5"、12)); us.add(new user( "f2"、22)); us.add(new user( "f3"、2)); us.add(new user( "f4"、14)); us.add(new user( "f5"、32)); us.add(new user( "f4"、12)); us.add(new user( "f7"、17)); us.add(new user( "f8"、52)); system.out.println(us.toString()); long bt = system.nanotime(); collections.sort(us、new Comparator <user>(){@override public int Compare(user o1、user o2){if(o1.getage()<o2.getage())return -1; else if(o1.getage()> o2.getage() long et = system.nanotime(); System.out.println(et -bt); system.out.println(us.toString());もちろん、ここでは直接収集して並べ替えることができます(私たち)。コンパレータは、ユーザー独自の比較方法の比較を最適化するために使用されます(ユーザー名とソート文字列に従って同じ年齢の人を並べ替えます)。
簡単に言えば、アレイのソートでは、挿入ソートとマージのソーティングを使用し、アレイの長さが小さい場合に挿入ソートを直接マージします。
2)ソートを設定します
セットには、ハッシュセットとツリーセットが含まれます。ハッシュセットはハッシュマップに基づいており、ツリーセットはtreemapに基づいています。
Treemapは赤と黒の木を使用して実装されており、自然にソート機能があります。 「当然のことながら、ソート機能があります」とは、昇順と下降順序でイテレーターがあることを意味します。
では、ハッシュセットをどのようにソートしますか?ハッシュセットをリストに変換し、リストで並べ替えることができます。
例えば:
set <user> us = new Hashset <user>(); // set <user> us = new treeset <user>(); // set <user> us = new Troeset <user>(new Comparator <user>(){// // @override // public int Compare(user o1、user o2){// if(o1.getage()<o2.getage())// return -1; // else if(o1.getage() o1.getname()。比較(o2.getname()); us.add(new user( "f5"、12)); us.add(new user( "f2"、22)); us.add(new user( "f3"、2)); us.add(new user( "f4"、14)); us.add(new user( "f5"、32)); us.add(new user( "f4"、12)); us.add(new user( "f7"、17)); us.add(new user( "f8"、52)); // set->配列リスト<ユーザー>リスト= new arrayList <user>(us); System.out.println(list); collections.sort(list); System.out.println(list);ハッシュセットを配列に変換して、配列で並べ替えることもできます。
3)マップソート
マップには、ハッシュマップとツリーラップが含まれます。上記のように、Treemapは赤と黒の木で実装されており、自然に並べ替え機能があります。
では、ハッシュマップを「キー」でどのように並べ替えますか?この方法は非常にシンプルで、ハッシュマップを使用してツリーラップを構築します。
map <string、integer> us = new hashmap <string、integer>(); // map <string、integer> us = new Treemap <String、integer>(); us.put( "f1"、12); us.put( "f2"、13); us.put( "f5"、22); us.put( "f4"、42); us.put( "f3"、15); us.put( "f8"、21); us.put( "f6"、123); us.put( "f7"、1); us.put( "f9"、19); system.out.println(us.toString()); System.out.println(new Treemap <String、Integer>(us));
「値」で並べ替える方法は?
//値でソート<entry <entry <string、integer >> ks = us.entryset(); list <entry <string、integer >> list = new arrayList <map.entry <string、integer >>(ks); collections.sort(list、new Comparator <entry <entry <string、integer >>(){@override public int Compare(entry <string、integer> o1、entr <string、integer> o2){if(o1.getvalue()<o2.getvalue()<return -1; els(o1.getvalue() System.out.println(list);マップのセット構造へのエントリを提案し、セットをリストに変換し、最後にリストに従って並べ替えます。
Javaコレクションのソート問題に関する上記の簡単な議論は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。