질문 : 특정 수업에서 30 명의 학생 번호는 20070301-20070330입니다. 그들 모두는 Java 프로그래밍 과정을 수강했으며 모든 학생들의 성적을 제공했습니다 (60-100 범위의 임의 숫자로 생성 할 수 있음). 이 수업의 모든 학생들의 성적을 낮게까지 순서대로 인쇄하는 프로그램을 작성하십시오.
요구 사항 : 목록, 맵을 사용하여 별도로 구현하도록 설정하십시오. 인쇄 된 정보에는 학생 번호, 이름 및 성적이 포함됩니다.
1. 목록 수집을 사용하여 구현하십시오
java.util.arraylist 가져 오기; java.util.collections import; import java.util.comparator; import java.util.iterator; java.util.linkedList 가져 오기; Java.util.treemap import; public class test2 {public static void main (string [] args) { / * arraylist와 함께 구현 * * arraylist <tudent> al = new arraylist <tudent> (); for (int i = 20070301, j = 10; i <= 20070330; i ++, j ++) {al.add (신입 } // ArrayList 정렬은 수집의 정렬 () 메소드에 의해 달성됩니다. collections.sort (al, new SortBygrade ()); for (학생 sd : al) system.out.println (sd); */ linkedlist <guldrent> lt = new LinkedList <tudent> (); for (int i = 20070301, j = 10; i <= 20070330; i ++, j ++) {lt.add (신입생 (i, (int) (40*math.random ()+60), "학생"+j)); } // 링크 된 목록 collections.sort (lt, new SortBygrade ())를 정렬합니다. // (Student SD : LT) System.out.println (SD)의 출력 링크 목록; }} // 학생 클래스 학생 {int num, 학년; 문자열 이름; // 생성자 공개 학생 (int num, int grade, 문자열 이름) {this.num = num; this.name = 이름; this.grade = 등급; } // public String toString () {// system.out.println ( "hi"); "학생 번호 :"+this.num+"/t"+"이름 :"+this.name+""+"score :"+this.grade; }} // 비교기 클래스 만들기 SortBygrade Implements Implements Impless <tudent> {@override public int compart (학생 s1, 학생 s2) {if (s1.grade> s2.grade) 반환 1; if (s1.grade <s2.grade) return -1; if (s1.grade == S2.grade) 반환 s1.name.compareto (s2.name); 반환 0; }}출력 결과는 그림에 표시됩니다.
목록 수집 프레임 워크 요약 :
1. 목록 컬렉션은 실제로 동적 배열이며, 반복없이 루프를 통해 요소를 직접 가져올 수 있습니다.
2. 목록 컬렉션을 출력 할 때 컬렉션에 객체를 저장하는 ToString () 메소드는 기본적으로 호출되므로 클래스에서 덮어 쓰야합니다.
toString () 메소드가 재정의되지 않으면 사용해야합니다.
for (int i = 0; i <lt.size (); i ++) {Student s = lt.get (i); System.out.println ( "학생 번호 :"+s.num+"이름 :"+s.name+"점수 :"+s.grade); } 3. 목록 컬렉션의 정렬에는 컬렉션 도구 클래스의 도움이 필요합니다. 따라서 비교기 클래스를 사용자 정의하고 자신의 비교 규칙을 정의해야합니다.
2. 세트 컬렉션을 사용하여 구현하십시오
(1) TreeSet을 사용하여 구현하십시오
패키지 com.package1; java.util.*; Public Class Stuscore {public static void main (String [] args) {treeset <tudent> ts = new Treeset <tudent> (new com ()); // (int i = 20070301, j = 1; i <= 20070330; i ++, j ++) {ts.add (신입생 (i, "student"+j, (int) (40*math.random ()+60)); } // 반복적 인 루프를 검색하여 반복자 <tudent> it = ts.ITerator (); while (it.hasnext ()) {Student o1 = it.next (); System.out.println ( "학생 번호 :"+o1.num+""+"이름 :"+o1.name+""+""+"score :"+o1.grade); }}} // 학생 클래스 학생 {int num; int 등급; 문자열 이름; 공개 학생 (int num, 문자열 이름, int grade) {this.num = num; this.name = 이름; this.grade = 등급; }} class com implements comparator {@override public int compart (Object O1, Object O2) {Student S1 = (Student) O1; 학생 S2 = (학생) O2; if (s1.grade> s2.grade) 반환 1; if (s1.grade <s2.grade) return -1; if (s1.grade == S2.grade) {return new Integer (s1.num) .compareto (new Integer (s2.num)); } 반환 0; }} 출력 결과는 다음과 같습니다.
학생 ID : 20070307 이름 : ClassMate 16 점수 : 60
학생 ID : 20070309 이름 : ClassMate 18 점수 : 60
학생 ID : 20070314 이름 : 급우 23 점수 : 61
학생 ID : 20070318 이름 : ClassMate 27 점수 : 61
학생 ID : 20070322 이름 : Classmate 31 점수 : 61
학생 ID : 20070306 이름 : ClassMate 15 점수 : 62
학생 ID : 20070310 이름 : ClassMate 19 점수 : 64
학생 ID : 20070302 이름 : ClassMate 11 점수 : 66
학생 ID : 20070308 이름 : ClassMate 17 점수 : 68
학생 ID : 20070321 이름 : ClassMate 30 점수 : 68
학생 ID : 20070330 이름 : Classmate 39 점수 : 69
학생 ID : 20070303 이름 : ClassMate 12 점수 : 70
학생 ID : 20070320 이름 : Classmate 29 점수 : 70
학생 ID : 20070323 이름 : ClassMate 32 점수 : 77
학생 ID : 20070313 이름 : Classmate 22 점수 : 78
학생 ID : 20070304 이름 : ClassMate 13 점수 : 79
학생 ID : 20070324 이름 : Classmate 33 점수 : 83
학생 ID : 20070326 이름 : Classmate 35 점수 : 84
학생 ID : 20070327 이름 : ClassMate 36 점수 : 85
학생 ID : 20070311 이름 : ClassMate 20 점수 : 88
학생 ID : 20070305 이름 : ClassMate 14 점수 : 89
학생 ID : 20070329 이름 : ClassMate 38 점수 : 89
학생 ID : 20070316 이름 : ClassMate 25 점수 : 90
학생 ID : 20070301 이름 : ClassMate 10 점수 : 95
학생 ID : 20070312 이름 : ClassMate 21 점수 : 96
학생 ID : 20070317 이름 : Classmate 26 점수 : 97
학생 ID : 20070319 이름 : ClassMate 28 점수 : 97
학생 ID : 20070325 이름 : Classmate 34 점수 : 98
학생 ID : 20070315 이름 : ClassMate 24 점수 : 99
학생 ID : 20070328 이름 : Classmate 37 점수 : 99
트리셋 요약 :
1. 요소를 반복 할 수 없으며 트리셋이 주문됩니다.
2. 두 가지 정렬 방법 :
(1) 클래스 com emplements comparator {}와 같은 비교기 클래스를 사용자 정의하고 비교 (Object O1, Object O2) 메소드를 구현하고 비교 규칙을 정의하십시오.
(2) 요소 자체를 비교하십시오.
단계 : treeset에 요소를 추가하여 비교 가능한 인터페이스를 구현하고 비교 방법을 무시합니다. 이 순서는 또한 자연스러운 요소 또는 기본 순서입니다.
방법 1과 방법 2의 차이 :
두 가지 방법에는 고유 한 장점과 단점이 있습니다. 비교할 수있는 것은 간단합니다. 비슷한 인터페이스를 구현하는 객체가 비슷한 객체가되는 한 소스 코드를 수정해야합니다.
비교기 사용의 장점은 소스 코드를 수정할 필요가 없지만 비교기를 구현한다는 것입니다. 사용자 정의 객체를 비교 해야하는 경우 비교기와 객체를 함께 전달하면 크기를 비교할 수 있습니다. 비교기에서 사용자는 스스로 복잡하고 일반적인 논리를 구현하여 비교적 간단한 물체를 일치시킬 수있어 많은 반복적 인 노동을 절약 할 수 있습니다.
(2) 해시 세트를 사용하여 구현하십시오
패키지 com.package1; java.util.*; Public Class Stuscore {public static void main (string [] args) {Hashset <tudent> hs = new Hashset <tudent> (); // (int i = 20070301, j = 1; i <= 20070330; i ++, j ++) {hs.add (new student (i, "student"+j, (int) (40*math.random ()+60)); } arraylist <tudent> li = new ArrayList (HS); Collections.Sort (Li, New SortBygrade ()); for (학생 ss : li) system.out.println (ss); }} // 학생 클래스 학생 {int num; int 등급; 문자열 이름; 공개 학생 (int num, 문자열 이름, int grade) {this.num = num; this.name = 이름; this.grade = 등급; } public String toString () {//system.out.println("hi "); "학생 번호 :"+this.num+"/t"+"이름 :"+this.name+""+"score :"+this.grade; }} Class SortBygrade 구현 비교기 {@override public int comperm (Object O1, Object O2) {Student S1 = (Student) O1; 학생 S2 = (학생) O2; if (s1.grade> s2.grade) 반환 1; if (s1.grade <s2.grade) return -1; // if (s1.grade == S2.grade) 반환 0; }} 출력 결과는 다음과 같습니다.
학생 ID : 20070310 이름 : ClassMate 19 점수 : 60
학생 ID : 20070330 이름 : 급우 39 점수 : 62
학생 ID : 20070326 이름 : Classmate 35 점수 : 63
학생 ID : 20070317 이름 : ClassMate 26 점수 : 64
학생 ID : 20070318 이름 : ClassMate 27 점수 : 65
학생 ID : 20070322 이름 : Classmate 31 점수 : 65
학생 ID : 20070301 이름 : ClassMate 10 점수 : 67
학생 ID : 20070328 이름 : 급우 37 점수 : 68
학생 ID : 20070304 이름 : Classmate 13 점수 : 68
학생 ID : 20070319 이름 : ClassMate 28 점수 : 69
학생 ID : 20070313 이름 : Classmate 22 점수 : 70
학생 ID : 20070303 이름 : ClassMate 12 점수 : 71
학생 ID : 20070312 이름 : Classmate 21 점수 : 71
학생 ID : 20070329 이름 : ClassMate 38 점수 : 72
학생 ID : 20070306 이름 : ClassMate 15 점수 : 72
학생 ID : 20070324 이름 : Classmate 33 점수 : 72
학생 ID : 20070305 이름 : ClassMate 14 점수 : 75
학생 ID : 20070315 이름 : ClassMate 24 점수 : 75
학생 ID : 20070314 이름 : Classmate 23 점수 : 78
학생 ID : 20070307 이름 : ClassMate 16 점수 : 80
학생 ID : 20070311 이름 : ClassMate 20 점수 : 81
학생 ID : 20070302 이름 : Classmate 11 점수 : 83
학생 ID : 20070309 이름 : ClassMate 18 점수 : 84
학생 ID : 20070320 이름 : ClassMate 29 점수 : 85
학생 ID : 20070321 이름 : Classmate 30 점수 : 85
학생 ID : 20070316 이름 : ClassMate 25 점수 : 86
학생 ID : 20070327 이름 : ClassMate 36 점수 : 90
학생 ID : 20070308 이름 : ClassMate 17 점수 : 94
학생 ID : 20070323 이름 : ClassMate 32 점수 : 94
학생 ID : 20070325 이름 : ClassMate 34 점수 : 95
해시 세트 요약 :
1. 해시 세트의 요소는 반복 할 수 없습니다. 반복적으로 추가되면 하나만 표시됩니다.
원칙은 다음과 같습니다.
해시 세트 : 기본 데이터 구조는 해시 테이블입니다. 스레드 inscure입니다. 동기화.
2. 해시셋은 요소의 독창성을 어떻게 보장합니까?
답변 : 해시 코드와 동등한 두 가지 요소 방법을 통해 수행됩니다.
요소의 해시 코드 값이 동일하면, 평등이 true인지 결정됩니다. 요소의 해시 코드 값이 다른 경우, 동등한 항목이 호출되지 않습니다.
3. 세트 컬렉션을 목록 컬렉션으로 변환하여 해시 세트를 정렬하고 Collections.sort () 메소드의 도움으로 정렬을 구현하십시오.
3. Treemap을 사용하여 구현하십시오
패키지 com.package1; import java.util.comparator; import java.util.iterator; java.util.set import; Java.util.treemap import; public class testtreemap {public static void main (String [] args) {// 1. 컬렉션 작성 treemap <스튜던트, 정수> tm = new treemap <학생, integer> (); for (int i = 20070301, j = 10; i <= 20070330; i ++, j ++) {int grade = (int) (40*math.random ()+60); // 2. 요소 tm.put 추가 (신입생 (등급, "학생"+j), i); } // 3. 세트를 가로 지르고 정렬 된 세트 세트 <tudent> k = tm.Keyset (); iterator <tudent> it = k.iterator (); while (it.hasnext ()) {Student key = it.next (); 정수 num = tm.get (키); System.out.println ( "학생 번호 :"+num+""+"이름 :"+key.name+""+"score :"+key.grade); }}} 클래스 학생을 구현할 수 있습니다. 문자열 이름; 공개 학생 (int grade, 문자열 이름) {this.grade = grade; this.name = 이름; } @override public int compareto (학생 o) {if (this.grade> o.grade) 반환 1; if (this.grade == O.grade) {// 성적이 동일 할 때 이름별로 정렬 return this.name.compareto (o.name); } 반환 -1; }} 출력 결과는 다음과 같습니다.
학생 ID : 20070303 이름 : ClassMate 12 점수 : 61
학생 ID : 20070323 이름 : Classmate 32 점수 : 61
학생 ID : 20070317 이름 : Classmate 26 점수 : 62
학생 ID : 20070309 이름 : ClassMate 18 점수 : 64
학생 ID : 20070301 이름 : ClassMate 10 점수 : 67
학생 ID : 20070304 이름 : 급우 13 점수 : 69
학생 ID : 20070322 이름 : Classmate 31 점수 : 69
학생 ID : 20070328 이름 : Classmate 37 점수 : 70
학생 ID : 20070305 이름 : ClassMate 14 점수 : 71
학생 ID : 20070319 이름 : ClassMate 28 점수 : 73
학생 ID : 20070321 이름 : ClassMate 30 점수 : 74
학생 ID : 20070310 이름 : ClassMate 19 점수 : 81
학생 ID : 20070315 이름 : ClassMate 24 점수 : 82
학생 ID : 20070307 이름 : ClassMate 16 점수 : 84
학생 ID : 20070330 이름 : Classmate 39 점수 : 84
학생 ID : 20070312 이름 : ClassMate 21 점수 : 85
학생 ID : 20070324 이름 : Classmate 33 점수 : 87
학생 ID : 20070306 이름 : ClassMate 15 점수 : 88
학생 ID : 20070308 이름 : ClassMate 17 점수 : 90
학생 ID : 20070327 이름 : ClassMate 36 점수 : 90
학생 ID : 20070318 이름 : ClassMate 27 점수 : 91
학생 ID : 20070316 이름 : ClassMate 25 점수 : 92
학생 ID : 20070320 이름 : ClassMate 29 점수 : 92
학생 ID : 20070314 이름 : Classmate 23 점수 : 93
학생 ID : 20070313 이름 : Classmate 22 점수 : 94
학생 ID : 20070302 이름 : ClassMate 11 점수 : 95
학생 ID : 20070325 이름 : ClassMate 34 점수 : 95
학생 ID : 20070329 이름 : ClassMate 38 점수 : 97
학생 ID : 20070326 이름 : Classmate 35 점수 : 98
학생 ID : 20070311 이름 : ClassMate 20 점수 : 99
Treemap 요약 :
1. Treemap은 기본적으로 키를 정렬하므로 사용자 정의 객체를 키에 넣고 학생 번호를 나타내는 정수를 값에 넣을 수 있습니다. 키를 정렬 할 때는 사용자 정의 객체에 속성을 지정하여 정렬 할 수 있습니다.
2. MAP Collection은 put () 메소드를 사용하여 요소를 추가합니다.
3.지도 세트를 취하는 원리 : 맵을 세트로 변환합니다. 반복자를 통해 나가십시오. 지도 컬렉션을 추출하는 두 가지 방법 :
(1) <k> 키 세트 설정 : 지도의 모든 키를 세트 컬렉션에 저장하십시오. 세트에는 반복자가 있기 때문입니다. 모든 키는 GET 방법에 따라 반복적 인 방식으로 검색 할 수 있습니다. 각 키에 해당하는 값을 얻으십시오.
(2) 설정 <map.entry <k, v >> Entryset : 맵 컬렉션의 매핑 관계를 세트 컬렉션에 저장하면이 관계의 데이터 유형은 다음과 같습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.