package collection
import java.util.*
public class SetTest {
public List<Course> coursesToSelect
private Scanner console
Student student
public SetTest()
{
coursesToSelect = new ArrayList<Course>()
console = new Scanner(System.in)
}
//用于添加备选课程
public void testAdd()
{
Course cr1 = new Course("1","数据结构")
coursesToSelect.add(cr1)
Course cr2 = new Course("2","C语言")
coursesToSelect.add(cr2)
Course[] course = {new Course("3","离散数学"),new Course("4","汇编语言")}
coursesToSelect.addAll(Arrays.asList(course))
Course[] course2 = {new Course("5","高等数学"),new Course("6","大学英语")}
coursesToSelect.addAll(Arrays.asList(course2))
}
public void testForEach()
{
System.out.println("有如下课程待选:")
for(Object obj:coursesToSelect)
{
Course cr = (Course)obj
System.out.println("课程:"+cr.id+":"+cr.name)
}
}
//创建一个学生对象并选课
public void creatStudentAndSelectCourse()
{
student = new Student("1","小明")
System.out.println("欢迎学生:"+student.name +"选课")
for(int i=0
{
System.out.println("请输入课程id")
String courseId = console.next()
for(Course cr:coursesToSelect)
{
if(cr.id.equals(courseId))
{
student.courses.add(cr)
student.courses.add(cr)
//Set中无论添加某对象多少次都只会保留第一个该对象(的引用)
//student.courses.add(null)
}
}
}
}
//Set中的元素是无序且不可重复的 所以没有get方法取出指定位置元素 只能通过foreach或迭代遍历
public void testForEachForSet(Student st)
{
System.out.println("共选择了"+st.courses.size()+"门课程")
//打印输出学生所选课程
for(Course cr:st.courses)
{
System.out.println("选择了课程:"+cr.id+":"+cr.name)
}
}
//List的contains()/containsAll()方法判断是否包含某元素 返回bool
public void testListContains()
{
//Course course = coursesToSelect.get(0)
//System.out.println("取得课程:"+course.name)
//System.out.println("备选课程中是否包含课程:"+course.name+"?"+
// coursesToSelect.contains(course))
//创建一个新课程对象与course对象一致 若未重写contains()中用到的equals()方法则返回false
//Course course2 = new Course(course.id,course.name)
//System.out.println("备选课程中是否包含课程:"+course2.name+"?"+
// coursesToSelect.contains(course2))
//提示输入课程名称
System.out.println("请输入课程名称:")
String name = console.next()
Course course2 = new Course()
course2.name = name
System.out.println("备选课程中是否包含课程:"+course2.name+"? "+
coursesToSelect.contains(course2))
//若包含 通过indexOf方法取得索引位置(遍历元素 调用equals()方法)若重复出现 返回第一次出现的位置
//若是lastIndexOf()方法则从队尾开始遍历 返回末一个的索引位置
//若未出现 以上两种方法都返回-1
if(coursesToSelect.contains(course2))
{
System.out.println("课程:"+course2.name+"的索引位置为:"+
coursesToSelect.indexOf(course2))
}
}
//测试Set的contains方法
//调用hashCode()方法返回哈希码 哈希码相等的情况下调用equals()
//因此要重写课程类的hashCode()和equals()
public void testSetContains()
{
System.out.println("请输入课程名称:")
String name = console.next()
Course course = new Course()
course.name = name
System.out.println("备选课程中是否包含课程:"+course.name+"? "+
student.courses.contains(course))
}
public static void main(String[] args) {
SetTest st = new SetTest()
st.testAdd()
st.testListContains()
st.testForEach()
st.creatStudentAndSelectCourse()
st.testSetContains()
}
}
package collection;
public class Course {
public String id;
public String name;
public Course(String id,String name)
{
this.id = id;
this.name = name;
}
public Course()
{
}
@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 (!(obj instanceof Course))
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;
}
}
package collection;
import java.util.*;
public class Student implements Comparable<Student> {
public String id;
public String name;
public Set<Course> courses;
@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 (!(obj instanceof Student))
return false;
Student other = (Student) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public Student(String id,String name)
{
this.id = id;
this.name = name;
this.courses = new HashSet<Course>();
}
@Override
public int compareTo(Student o) {
return this.id.compareTo(o.id);
}
}