質問:特定のクラスの30人の学生の学生数は20070301-20070330です。全員がJavaプログラミングコースを受講し、すべての学生の成績を与えられました(乱数で生成でき、60〜100の範囲です)。このクラスのすべての学生の成績を低から高に順番に印刷するプログラムを作成してください。
要件:リスト、マップ、およびセットを使用して個別に実装します。印刷された情報には、学生番号、名前、成績が含まれます。
1.リストコレクションを使用して実装します
java.util.arraylistをインポートします。 java.util.collectionsをインポートします。 java.util.comparatorをインポートします。 java.util.iteratorをインポートします。 java.util.linkedListをインポートします。 java.util.treemapをインポートします。 public class test2 {public static void main(string [] args){ / * arraylistで実装されている * * arrayList <Student> al = new ArrayList <Student>(); for(int i = 20070301、j = 10; i <= 20070330; i ++、j ++){al.add(new Student(i、(int)(40*math.random()+60)、 "sustent"+j)); } // arrayListソートは、コレクションのsort()メソッドによって達成されます。 collections.sort(al、new sortbygrade()); (学生SD:AL)System.out.Println(SD); */ linkedList <Student> lt = new LinkedList <Student>(); for(int i = 20070301、j = 10; i <= 20070330; i ++、j ++){lt.add(new Student(i、(int)(40*math.random()+60)、 "student"+j)); } //リンクリストCollections.sort(lt、new sortbygrade())を並べ替えます。 //(Student SD:LT)System.out.Println(SD)の出力リンクリスト; }} //学生クラスの学生{int num、grade;文字列名; // Constructor Public Student(int num、int grade、string name){this.num = num; this.name = name; this.grade = grade; } // public String toString(){// System.out.println( "hi"); 「学生番号」を返します。 }} // Comparatorクラスの作成SORTBYGRADE COMPARATOR <Student> {@Override public int Compare(Student S1、Student S2){if(s1.grade> s2.grade)return 1; if(s1.grade <s2.grade)return -1; if(s1.grade == s2.grade)return s1.name.compareto(s2.name); 0を返します。 }}出力の結果は図に示されています。
リストコレクションフレームワークの概要:
1.リストコレクションは実際には動的な配列であり、要素はイテレーションなしでforループを介して直接除外できます。
2。リストコレクションを出力する場合、コレクションにオブジェクトを保存するtoString()メソッドはデフォルトで呼び出されるため、クラスで上書きする必要があります。
toString()メソッドがオーバーライドされていない場合は、使用する必要があります
for(int i = 0; i <lt.size(); i ++){sudent s = lt.get(i); System.out.println( "学生番号:"+s.num+"name:"+s.name+"score:"+s.grade); } 3.リストコレクションの並べ替えには、コレクションツールクラス、つまりcollections.sort(list、new Comparator class())メソッドのヘルプが必要です。したがって、コンパレータクラスをカスタマイズし、独自の比較ルールを定義する必要があります。
2。セットコレクションを使用して実装します
(1)ツリーセットを使用して実装します
パッケージcom.package1; Java.util。*をインポートします。 public class stuscore {public static void main(string [] args){treeset <sustent> ts = new Treeset <Student>(new com()); // for(int i = 20070301、j = 1; i <= 20070330; i ++、j ++){ts.add(new Student(i、 "desute"+j、(int)(40*math.random()+60)); } // iterative loop fon iterative Iterator <Student> it = ts.iterator(); while(it.hasnext()){desute o1 = it.next(); System.out.println( "学生番号:"+o1.num+""+"name:"+o1.name+""+""+"スコア:"+o1.grade); }}} //学生クラスの学生{int num; intグレード;文字列名; Public Student(int num、string name、int grade){this.num = num; this.name = name; this.grade = grade; }} class com実装Comparator {@override public int Compare(Object o1、object o2){desute s1 =(student)o1;学生S2 =(学生)O2; if(s1.grade> s2.grade)return 1; if(s1.grade <s2.grade)return -1; if(s1.grade == s2.grade){return new Integer(s1.num).compareto(new Integer(s2.num)); } return 0; }}出力の結果は次のとおりです。
学生ID:20070307名前:クラスメート16スコア:60
学生ID:20070309名前:クラスメート18スコア:60
学生ID:20070314名前:クラスメート23スコア:61
学生ID:20070318名前:クラスメート27スコア:61
学生ID:20070322名前:クラスメート31スコア:61
学生ID:20070306名前:クラスメート15スコア:62
学生ID:20070310名前:クラスメート19スコア:64
学生ID:20070302名前:クラスメート11スコア:66
学生ID:20070308名前:クラスメート17スコア:68
学生ID:20070321名前:クラスメート30スコア:68
学生ID:20070330名前:クラスメート39スコア:69
学生ID:20070303名前:クラスメート12スコア:70
学生ID:20070320名:クラスメート29スコア:70
学生ID:20070323名前:クラスメート32スコア:77
学生ID:20070313名前:クラスメート22スコア:78
学生ID:20070304名前:クラスメート13スコア:79
学生ID:20070324名前:クラスメート33スコア:83
学生ID:20070326名前:クラスメート35スコア:84
学生ID:20070327名前:クラスメート36スコア:85
学生ID:20070311名:クラスメート20スコア:88
学生ID:20070305名前:クラスメート14スコア:89
学生ID:20070329名前:クラスメート38スコア:89
学生ID:20070316名前:クラスメート25スコア:90
学生ID:20070301名前:クラスメート10スコア:95
学生ID:20070312名前:クラスメート21スコア:96
学生ID:20070317名前:クラスメート26スコア:97
学生ID:20070319名前:クラスメート28スコア:97
学生ID:20070325名前:クラスメート34スコア:98
学生ID:20070315名前:クラスメート24スコア:99
学生ID:20070328名前:クラスメート37スコア:99
ツリーセットの概要:
1。要素を繰り返すことができず、ツリーセットが注文されます。
2。2つのソートメソッド:
(1)クラスCom emplementsComparator {}などのコンパレータクラスをカスタマイズし、比較(オブジェクトO1、オブジェクトO2)メソッドを実装し、その比較ルールを定義します。
(2)要素自体を比較する。
手順:Treesetに要素を追加して、比較可能なインターフェイスを実装し、比較メソッドをオーバーライドします。この順序は、要素の自然な順序、またはデフォルトの順序でもあります。
方法1と方法2の違い:
2つの方法には、独自の利点と短所があります。同等の使用は簡単です。同等のインターフェイスを実装するオブジェクトが匹敵するオブジェクトになる限り、ソースコードの変更が必要です。
コンパレータを使用する利点は、ソースコードの変更を必要とせず、コンパレータを実装することです。カスタムオブジェクトを比較する必要がある場合、コンパレータとオブジェクトを一緒に渡すことでサイズを比較できます。コンパレータでは、ユーザーは複雑で一般的なロジックを自分で実装できるため、比較的単純なオブジェクトに一致させることができます。これにより、多くの反復労働を節約できます。
(2)ハッシュセットを使用して実装します
パッケージcom.package1; Java.util。*をインポートします。 public class stuscore {public static void main(string [] args){hashset <susted> hs = new Hashset <Student>(); // for(int i = 20070301、j = 1; i <= 20070330; i ++、j ++){hs.Add(new Student(I、 "desute"+j、(int)(40*math.random()+60)); } arrayList <Student> li = new ArrayList(HS); collections.sort(li、new sortbygrade()); for(Student ss:li)system.out.println(ss); }} //学生クラスの学生{int num; intグレード;文字列名; Public Student(int num、string name、int grade){this.num = num; this.name = name; this.grade = grade; } public string toString(){//system.out.println("hi "); 「学生番号」を返します。 }} class sortbygrade実装Comparator {@override public int Compare(object o1、object o2){desute s1 =(desute)o1;学生S2 =(学生)O2; if(s1.grade> s2.grade)return 1; if(s1.grade <s2.grade)return -1; // if(s1.grade == s2.grade)return 0; }}出力の結果は次のとおりです。
学生ID:20070310名前:クラスメート19スコア:60
学生ID:20070330名前:クラスメート39スコア:62
学生ID:20070326名前:クラスメート35スコア:63
学生ID:20070317名前:クラスメート26スコア:64
学生ID:20070318名前:クラスメート27スコア:65
学生ID:20070322名前:クラスメート31スコア:65
学生ID:20070301名:クラスメート10スコア:67
学生ID:20070328名前:クラスメート37スコア:68
学生ID:20070304名前:クラスメート13スコア:68
学生ID:20070319名前:クラスメート28スコア:69
学生ID:20070313名前:クラスメート22スコア:70
学生ID:20070303名前:クラスメート12スコア:71
学生ID:20070312名前:クラスメート21スコア:71
学生ID:20070329名前:クラスメート38スコア:72
学生ID:20070306名前:クラスメート15スコア:72
学生ID:20070324名前:クラスメート33スコア:72
学生ID:20070305名前:クラスメート14スコア:75
学生ID:20070315名前:クラスメート24スコア:75
学生ID:20070314名前:クラスメート23スコア:78
学生ID:20070307名前:クラスメート16スコア:80
学生ID:20070311名:クラスメート20スコア:81
学生ID:20070302名前:クラスメート11スコア:83
学生ID:20070309名前:クラスメート18スコア:84
学生ID:20070320名:クラスメート29スコア:85
学生ID:20070321名前:クラスメート30スコア:85
学生ID:20070316名前:クラスメート25スコア:86
学生ID:20070327名前:クラスメート36スコア:90
学生ID:20070308名前:クラスメート17スコア:94
学生ID:20070323名前:クラスメート32スコア:94
学生ID:20070325名前:クラスメート34スコア:95
ハッシュセットの概要:
1.ハッシュセットの要素を繰り返すことはできません。それらが繰り返し追加されると、1つだけが表示されます。
原則は次のとおりです。
ハッシュセット:基礎となるデータ構造はハッシュテーブルです。それはスレッドインセンスです。同期していません。
2。ハッシュセットは、要素の独自性をどのように保証しますか?
回答:それは、ハッシュコードと等しい2つの要素の方法で行われます。
要素のハッシュコード値が同じ場合、等しいものが真であるかどうかが判断されます。要素のハッシュコード値が異なる場合、等しいものは呼び出されません。
3。セットコレクションをリストコレクションに変換し、コレクションS.Sort()メソッドの助けを借りてソートを実装して、ハッシュセットを並べ替えます。
3. Treemapを使用して実装します
パッケージcom.package1; java.util.comparatorをインポートします。 java.util.iteratorをインポートします。 java.util.setをインポートします。 java.util.treemapをインポートします。 public class testtreemap {public static void main(string [] args){// 1。コレクションtreemap <student、integer> tm = new treemap <student、integer>()を作成します。 for(int i = 20070301、j = 10; i <= 20070330; i ++、j ++){int grade =(int)(40*math.random()+60); // 2。要素tm.put(new Student(grade、 "desute"+j)、i)を追加します。 } // 3。セットをトラバースして並べ替えて完了しました。 Iterator <Student> it = k.iterator(); while(it.hasnext()){student key = it.next(); integer num = tm.get(key); System.out.println( "学生番号:"+num+""+"name:"+key.name+""+"スコア:"+key.grade); }}} class Student Implements Camparable <Student> {int grade;文字列名;パブリック学生(intグレード、文字列名){this.grade = grade; this.name = name; } @Override public int compareoto(desute o){if(this.grade> o.grade)return 1; if(this.grade == o.grade){//グレードが同じ場合、名前で並べ替えます。 } return -1; }}出力の結果は次のとおりです。
学生ID:20070303名前:クラスメート12スコア:61
学生ID:20070323名前:クラスメート32スコア:61
学生ID:20070317名前:クラスメート26スコア:62
学生ID:20070309名前:クラスメート18スコア:64
学生ID:20070301名:クラスメート10スコア:67
学生ID:20070304名前:クラスメート13スコア:69
学生ID:20070322名前:クラスメート31スコア:69
学生ID:20070328名前:クラスメート37スコア:70
学生ID:20070305名前:クラスメート14スコア:71
学生ID:20070319名前:クラスメート28スコア:73
学生ID:20070321名前:クラスメート30スコア:74
学生ID:20070310名前:クラスメート19スコア:81
学生ID:20070315名前:クラスメート24スコア:82
学生ID:20070307名前:クラスメート16スコア:84
学生ID:20070330名前:クラスメート39スコア:84
学生ID:20070312名前:クラスメート21スコア:85
学生ID:20070324名前:クラスメート33スコア:87
学生ID:20070306名前:クラスメート15スコア:88
学生ID:20070308名前:クラスメート17スコア:90
学生ID:20070327名前:クラスメート36スコア:90
学生ID:20070318名前:クラスメート27スコア:91
学生ID:20070316名前:クラスメート25スコア:92
学生ID:20070320名:クラスメート29スコア:92
学生ID:20070314名前:クラスメート23スコア:93
学生ID:20070313名前:クラスメート22スコア:94
学生ID:20070302名:クラスメート11スコア:95
学生ID:20070325名前:クラスメート34スコア:95
学生ID:20070329名前:クラスメート38スコア:97
学生ID:20070326名前:クラスメート35スコア:98
学生ID:20070311名:クラスメート20スコア:99
Treemapの概要:
1. Treemapはデフォルトでキーをソートするため、カスタムオブジェクトをキーに入れて、学生番号を表す整数を値に配置できます。キーをソートするとき、カスタムオブジェクトの属性を指定してソートできます。
2。マップコレクションは、put()メソッドを使用して要素を追加します。
3.マップセットを取り出す原則:マップセットをセットに変換します。イテレーターを通り抜けてください。マップコレクションを抽出する2つの方法:
(1)セット<k> keyset:マップ内のすべてのキーをセットコレクションに保存します。セットにはイテレーターがあるからです。すべてのキーは、GETメソッドに従って反復的に取得できます。各キーに対応する値を取得します。
(2)セット<map.entry <k、v >>エントリセット:マッピング関係をマップコレクションに保存してセットコレクションに保存し、この関係のデータ型はmap.entryです。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。