Java練習之學生選課後續
阿新 • • 發佈:2018-12-04
1.測試List的contains方法
contains方法返回一個boolean,包含返回true,否則返回false.
此外,由於list集合有序,可通過indexOf方法判斷某元素在該list中的位置。如果該元素在list中多次出現,則返回第一次出現的索引位置。而lastindeOf方法返回該元素在list中最後一次出現的位置。如果該元素在list中不存在,返回-1。
重寫course中的equals方法:
public class Course { public String id; public String name; public Course() { } public Course(String id, String name) { super(); this.id = id; this.name = name; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Course other = (Course) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } }
對list進行測試:
package cn.coll.map; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; //備選課程類 public class ListTest { public List coursesToSelect; //存放備選課程的List public ListTest() { this.coursesToSelect = new ArrayList(); } //新增課程 public void testAdd() { coursesToSelect.add(new Course("1","資料結構"));//建立一個課程物件,並新增到課程list中 coursesToSelect.add(new Course("2","計算機網路"));//建立一個課程物件,並新增到課程list中 Course[] course = { new Course("3","組成原理"),new Course("4","作業系統")}; coursesToSelect.addAll(Arrays.asList(course)); } /* * 測試list中的contains方法 */ public void testContains() { //取得備選課程list中的第一個元素 Course course = (Course)coursesToSelect.get(0); System.out.println("取得課程:"+course.name); System.out.println("判斷是否包含該課程:"+course.name+","+coursesToSelect.contains(course)); //新建一個課程物件,和course中的id和name值完全相同 Course course2 = new Course(course.id,course.name); System.out.println("取得課程:"+course2.name); System.out.println("判斷是否包含該課程:"+course2.name+","+coursesToSelect.contains(course2)); } /* * 迭代遍歷list集合 */ public void testIterator() { Iterator it = coursesToSelect.iterator(); System.out.println("通過迭代器訪問集合元素:"); while(it.hasNext()) { Course cou = (Course)it.next(); System.out.println(cou.id+","+cou.name); } } public void testForEach() { System.out.println("通過ForEach方法訪問集合元素:"); for(Object obj : coursesToSelect) { Course cor = (Course)obj; System.out.println(cor.id+","+cor.name); } } public static void main(String[] args) { ListTest lt = new ListTest(); lt.testAdd(); lt.testIterator(); lt.testContains(); } }
2.測試Set中的contains方法
使用HashSet,要複寫equals和hashcode方法
//在course中複寫hashcode和equals方法 @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Course other = (Course) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }
public class SetTest {
public List<Course> coursesToSelect;
private Scanner console;
public SetTest()
{
coursesToSelect = new ArrayList<Course>();
this.console = new Scanner(System.in);
}
public void courseAdd()
{
coursesToSelect.add(new Course("1","資料結構"));
coursesToSelect.add(new Course("2","高等數學"));
coursesToSelect.add(new Course("3","線型代數"));
}
public void testIterator()
{
Iterator<Course> it = coursesToSelect.iterator();
while(it.hasNext())
{
Course cou = it.next();
System.out.println(cou.id+","+cou.name);
}
}
/*
* 建立新的學生物件並選課
*/
public void creatAndSele()
{
//建立學生物件
Student stu = new Student("001","wangcai");
System.out.println("歡迎"+stu.name+"進入選課系統!");
//建立Scanner物件,接收從鍵盤輸入的課程ID
Scanner console = new Scanner(System.in);
//將鍵盤輸入的課程ID和備選課程中的ID進行對比,如果存在該課程,就加入到學生的選課中
for(int i = 0 ; i <3; i++)
{
System.out.println("請輸入課程ID:");
String courseID = console.next();
for(Course cr: coursesToSelect)
{
if(cr.id.equals(courseID))
{
stu.courses.add(cr);
}
}
}
System.out.println("您所選的課程為:");
//列印輸出學生所選課程
for(Course cr : stu.courses)
{
System.out.println(cr.id+","+cr.name);
}
System.out.println("您 一共選擇了"+stu.courses.size()+"門課程");
/*
* 測試set中的contains方法
*/
System.out.println("請輸入要查詢的課程名稱:");
String name = console.next();
Course course = new Course();
course.name = name;
System.out.println("您要查詢的課程名稱是:"+course.name);
System.out.println("course中是否包含該課程:"+stu.courses.contains(course));
}
public static void main(String[] args)
{
SetTest st = new SetTest();
st.courseAdd();
System.out.println("可選的課程有:");
st.testIterator();
st.creatAndSele();
}
}
3.Collections.sort方法
使用Collection的sort方法,對list的Integer和String,以及其他型別(Student)泛型進行排序。
對Integer和String型別的資料進行排序:
public class CollectionsTest {
/*
* 對List中的Integer泛型進行排序,
* 建立一個長度為10,資料在100以內的隨機數的list
* 呼叫sort方法進行排序
*/
public void testSortInt()
{
List<Integer> intList = new ArrayList<Integer>();
//生成隨機數
Random random = new Random();
Integer k;
for(int i = 0 ; i < 10 ; i ++)
{
//確保每次生成的隨機數都不相同
do {
k = random.nextInt(100);
}while(intList.contains(k));
intList.add(k);
}
Iterator it = intList.iterator();
System.out.println("排序之前");
while(it.hasNext())
{
System.out.println(it.next());
}
Collections.sort(intList);
System.out.println("排序之後");
for(Integer integer: intList)
{
System.out.println(integer);
}
}
public void stringSort()
{
List<String> strList = new ArrayList<String>();
strList.add("taobao");
strList.add("tianmao");
strList.add("alibaba");
System.out.println("排序之前");
for(String str : strList)
{
System.out.println(str);
}
Collections.sort(strList);
System.out.println("排序之後");
for(String str : strList)
{
System.out.println(str);
}
}
public static void main(String[] args) {
CollectionsTest cot = new CollectionsTest();
cot.testSortInt();
cot.stringSort();
}
}
4.使用Comparable和Comparator對自定義型別資料進行排序
Comparable介面:其實現類要實現compareTo方法,預設使用自然排序。
Comparator介面:其實現類要實現compare方法,不預設比較規則。
實現comparab介面,複寫student的compareTo方法:
//在Student類中實現Comparable介面,並複寫compareTo方法
@Override
public int compareTo(Student o) {
return this.id.compareTo(o.id);
}
//建立StuComparator類,複寫compare介面
public class StuComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.name.compareTo(o2.name);
}
}
//在CollectionTest類中實現Student比較
public void stuSort()
{
List<Student> stuList = new ArrayList<Student>();
Random random = new Random();
stuList.add(new Student(random.nextInt(100)+" ","wangxi"));
stuList.add(new Student(random.nextInt(100)+" ","zhaocai"));
stuList.add(new Student(random.nextInt(100)+" ","jinbao"));
System.out.println("排序前");
for(Student stu: stuList)
{
System.out.println(stu.name);
}
System.out.println("使用Comparable介面排序後");
Collections.sort(stuList);
for(Student stu : stuList)
{
System.out.println(stu.id+","+stu.name);
}
System.out.println("使用Comparator介面排序後");
Collections.sort(stuList,new StuComparator());
for(Student stu : stuList)
{
System.out.println(stu.id+","+stu.name);
}
}