Java の基本 TreeSet および Java カスタム タイプの並べ替え
TreeSet と Java カスタム タイプの並べ替え
- TreeSet が String を並べ替えられることを示します
- TreeSet カスタム タイプを並べ替えることができませんタイプ
- 比較ルールの作成方法
- 自己分散型バイナリ ツリー構造
- コンパレータ インターフェイスの実装
- コレクション ツール クラス
(無料学習の推奨事項: java 基本チュートリアル)
TreeSet のペアリングを示します。文字列はソート可能です。
1. TreeMap コレクションの最下層は実際には TreeMap です
2. TreeMap コレクションの最下層はバイナリ ツリーです
3. に配置された要素TreeSet コレクションは、TreeMap コレクションのキー部分に配置されるのと同じです。
4. TreeSet コレクション内の要素は順序付けされておらず、繰り返すことはできませんが、要素のサイズに従って自動的に並べ替えることができます。
は、ソート可能なコレクション
と呼ばれます。たとえば、データベースからデータを取得し、ユーザー情報を誕生日の昇順または降順でページに表示するプログラムを作成します。
TreeSet コレクションは順番に出し入れされるため、この時点で TreeSet コレクションを使用できます。
//创建一个TreeSet集合 TreeSet<string> ts=new TreeSet(); //添加Stringts.add("zhangsan");ts.add("lisi");ts.add("wangwu");ts.add("zhangsi");ts.add("wangliu");for(String s:ts){ //按照字典顺序排序 System.out.print(s+" "); } TreeSet<integer> ts2=new TreeSet();ts2.add(100);ts2.add(200);ts2.add(900);ts2.add(800); ts2.add(600);ts2.add(10);for(Integer i:ts2){ //按照升序排序 System.out.print(i+" ");}</integer></string>
TreeSet はカスタム タイプを並べ替えることができません
TreeSet はカスタム タイプを並べ替えることができますか?
次のプログラムでは、PERSON オブジェクト間の比較規則が指定されていないため、PERSON クラスをソートできません。誰が年上で誰が年下かは明記されていない。
public class TreeSetTest02 { public static void main(String[] args) { Person p1=new Person(50); Person p2=new Person(10); Person p3=new Person(20); Person p4=new Person(60); Person p5=new Person(40); Person p6=new Person(30); TreeSet<person> persons=new TreeSet(); persons.add(p1); persons.add(p2); persons.add(p3); persons.add(p4); persons.add(p5); persons.add(p6); for(Person p:persons){ System.out.println(p); } }}class Person{ int age; public Person(int age){ this.age=age; } @Override public String toString() { return "Person [age=" + age + "]"; }}</person>
Exception in thread "main" java.lang.ClassCastException: testCollection.Person cannot be cast to java.lang.Comparable
このエラーの理由は、
Person クラスが java.lang の Comparable インターフェイス
// を実装していないためです。それを TreeSet コレクションに入れます 要素は java.lang.Comparable インターフェイスを実装する必要があります
//そして、compareTo メソッドを実装します。equals を記述する必要はありません
public class TreeSetTest04 { public static void main(String[] args) { Customer p1=new Customer(50); Customer p2=new Customer(10); Customer p3=new Customer(20); Customer p4=new Customer(60); Customer p5=new Customer(40); Customer p6=new Customer(30); TreeSet<customer> customers=new TreeSet(); customers.add(p1); customers.add(p2); customers.add(p3); customers.add(p4); customers.add(p5); customers.add(p6); for(Customer p:customers){ System.out.println(p); } } } //放在TreeSet集合中的元素需要实现java.lang.Comparable接口//并且实现compareTo方法,equals可以不写 class Customer implements Comparable<customer>{ int age; public Customer(int age){ this.age=age; } @Override public String toString() { return "Customer [age=" + age + "]"; } //需要在这个方法中编写比较的逻辑,或者说比较的规则,按照什么进行比较。 //k.compareTo(t.key) //拿着参数k和集合中的每个k进行比较,返回值可能是>0,age2){// return 1;// }else{// return -1;// } return this.age-c.age; //>,<p>//あなたこのメソッドに比較ロジックを記述するか、比較が行われるルールを比較する必要があります。 <br> //k.compareTo(t.key)<br> //パラメータ k をセット内の各 k と比較します。戻り値は >0、 になる可能性があります。 / /<strong>比較ルールは、最終的にはプログラマによって実装されます。たとえば、年齢による昇順、または年齢による降順です。</strong></p> <p><strong>比較ルールの書き方</strong></p> <p>まず年齢で昇順に並べ替えます。年齢が同じ場合は、次に名前で昇順に並べ替えます。 </p> <pre class="brush:php;toolbar:false">public class TreeSetTest05 { public static void main(String[] args) { TreeSet<vip> vips=new TreeSet(); vips.add(new Vip("zhangsi",20)); vips.add(new Vip("zhangsan",20)); vips.add(new Vip("king",18)); vips.add(new Vip("soft",17)); for(Vip vip:vips){ System.out.println(vip); } }}class Vip implements Comparable<vip>{ String name; int age; public Vip(String name,int age){ this.name=name; this.age=age; } @Override public String toString() { return "Vip [name=" + name + ", age=" + age + "]"; } //compareTo方法的返回值很重要: //返回0表示相同,value会覆盖 //>0,会继续在右子树上找 //<p><strong>自己分散型バイナリ ツリー構造</strong></p> <p>1.<strong>自己バランス型二分木、左が小さく右が大きいという原理に従います </strong><br> 2. 二分木を走査するには 3 つの方法があります <br> 事前順序走査: 左ルートと右ルート <br> In-順序トラバーサル: 左と右のルート <br> 事後トラバーサル: 左と右のルート <br> 注: フロントとセンター 後で説明するのは、ルートの場所です <br> 3.<strong>TreeSet コレクションとTreeMap コレクションは、順序どおりのトラバーサル (左ルートと右ルート) を使用します。これらは自己バランス型バイナリ ツリーです。</strong><br> 100 200 50 60 80 120 140 130 135 180 666</p> <p><strong>コンパレータ インターフェイスの実装</strong></p> <p> TreeSet コレクションはソートできます。 2 番目の方法は、コンパレータを使用することです。</p> <pre class="brush:php;toolbar:false">public class TreeSetTest06 { public static void main(String[] args) { //创建TreeSet集合的时候,需要使用比较器 //TreeSet<wugui> wuGuis=new TreeSet(); //这样不行,没有通过构造方法传递一个比较器进去 TreeSet<wugui> wuGuis=new TreeSet(new WuguiComparator()); wuGuis.add(new Wugui(1000)); wuGuis.add(new Wugui(800)); wuGuis.add(new Wugui(900)); wuGuis.add(new Wugui(300)); wuGuis.add(new Wugui(60)); for(Wugui wugui:wuGuis){ System.out.println(wugui); } }}class Wugui{ int age; public Wugui(int age) { super(); this.age = age; } @Override public String toString() { return "Wugui [age=" + age + "]"; }}//单独再这里编写一个比较器//比较器实现java.util.Comparator接口(Comparable是java.lang包下的)class WuguiComparator implements Comparator<wugui>{ public int compare(Wugui o1,Wugui o2){ //指定比较规则 //按照年龄排序 return o1.age-o2.age; }}</wugui></wugui></wugui>
匿名の内部クラス メソッドを使用できます。
匿名の内部クラス メソッドを使用できます (これは、クラスには名前がありません。直接新しいインターフェイスです) #
TreeSet<wugui> wuGuis=new TreeSet(new Comparator<wugui>(){public int compare(Wugui o1,Wugui o2){ //指定比较规则 //按照年龄排序 return o1.age-o2.age; }});</wugui></wugui>
最初の方法: put コレクション内の要素は java.lang.Comparable インターフェイスを実装します。 2 番目の方法: TreeSet または TreeMap コレクションを構築するときにコンパレータ オブジェクトをそれに渡します。
Comparable と Comparator のどちらを選択すればよいですか?
比較ルールが変更されない場合、または比較ルールが 1 つしかない場合は、Comparable インターフェイスを実装することをお勧めします。
複数の比較ルールと複数の比較ルールがある場合比較ルールを頻繁に切り替える場合は、コンパレータ インターフェイスを使用することをお勧めします。
コンパレータ インターフェイスの設計は、OCP 原則に準拠しています。
コレクション ツール クラス
java.util.Collections コレクション ツール クラス。コレクションの操作を容易にします。
public class CollectionsTest { static class Wugui2 implements Comparable<wugui2>{ int age; public Wugui2(int age) { super(); this.age = age; } @Override public String toString() { return "Wugui2 [age=" + age + "]"; } @Override public int compareTo(Wugui2 o) { // TODO Auto-generated method stub return this.age-o.age; } } public static void main(String[] args) { //ArrayList集合不是线程安全的 List<string> list=new ArrayList<string>(); //变成线程安全的 Collections.synchronizedList(list); //排序 list.add("abc"); list.add("abe"); list.add("abd"); list.add("abf"); list.add("abn"); list.add("abm"); Collections.sort(list); for(String s:list){ System.out.println(s); } List<wugui2> wuguis=new ArrayList(); wuguis.add(new Wugui2(1000)); wuguis.add(new Wugui2(8000)); wuguis.add(new Wugui2(4000)); wuguis.add(new Wugui2(6000)); //注意:对list集合中元素排序,需要保证list集合中元素实现了Comparable接口 Collections.sort(wuguis); for(Wugui2 wugui:wuguis){ System.out.println(wugui); } //对set集合怎么排序呢 Set<string> set=new HashSet(); set.add("king"); set.add("kingsoft"); set.add("king2"); set.add("king1"); //将set集合转换成list集合 List<string> myList=new ArrayList(set); Collections.sort(myList); for(String s:myList){ System.out.println(s); } //这种方式也可以排序 //Collections.sort(list集合,比较器对象) }}</string></string></wugui2></string></string></wugui2>
関連する学習の推奨事項: Java の基礎
以上がJava の基本 TreeSet および Java カスタム タイプの並べ替えの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Spring Bootは、Java開発に革命をもたらす堅牢でスケーラブルな、生産対応のJavaアプリケーションの作成を簡素化します。 スプリングエコシステムに固有の「構成に関する慣習」アプローチは、手動のセットアップを最小化します。
