Java练习之学生选课后续

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);
		}		
	}

猜你喜欢

转载自blog.csdn.net/weixin_42139212/article/details/84545565