collection 集合
Collection接口 是List Set和Queue接口的父接口 定义了可用于操作List,Set和Queue的方法---增删改查
Set HashSet
Set接口及其实现类---HashSet Set是元素无序并且不可以重复的集合,被称为集
HashSet---哈希集,是Set的一个重要实现类
List--->元素有序,可以重复 Set--->元素无序,不可以重复
set循环用foreach,iterator list集合用get()方法
课程类Course如下所示:
/**
* 课程类
*/
public class Course
{
public String id;
public String name;
public Course(String id,String name){
this.id = id;
this.name = name;
}
//添加一个无参构造器
public Course() {
}
//重新equals函数,这个写了一部分不再写了
/*@Override
public boolean equals(Object obj) {
if(this == obj) {
return true;
}
if(obj == null)
return false;
return true;
}
*/
}
学生类Student如下所示:
import java.util.Set;
import java.util.HashSet;
/**
* 学生类
*/
//public class Student
public class Student implements Comparable<Student> { public String id;
public String name;
//public Set courses;//课程信息的属性,以前这样的实例
public Set<Course>courses;//课程信息的属性 public Student(String id,String name){ //构造器
this.id = id;
this.name = name;
//this.courses = new HashSet();//以前这样写
this.courses = new HashSet<Course>();
}//Student end @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;
}
@Override
public int compareTo(Student o) {
return this.id.compareTo(o.id);
}//compareTo end
}//Student end
Set的测试类SetTest如下所示:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; public class SetTest
{
public List<Course> coursesToSelect;
private Scanner console;
public Student student;
public SetTest() {
coursesToSelect = new ArrayList<Course>();
console = new Scanner(System.in);
}//SetTest end public void testAdd() {
Course cr2 = new Course("2","C语言");
coursesToSelect.add(0,cr2);
Course temp2 = (Course)coursesToSelect.get(0);
//System.out.println("添加了课程:"+temp2.id+":"+temp2.name);
}
/*
* 通过for each方法访问集合元素
* @param args
*/
public void testForEach() {
System.out.println("有如下课程待选(通过for each访问):");
for(Object obj:coursesToSelect) {
Course cr = (Course)obj;
System.out.println("课程:"+cr.id+":"+cr.name);
}
}
/*
* 测试List的contains方法
*/
public void testListContains() {
//取得备选课程序列的第0个元素
Course course = coursesToSelect.get(0);
//打印输出coursesToSelected是否包含course对象
System.out.println("取得课程:"+course.name);
System.out.println("备选课程中是否包含课程:"+course.name+","+coursesToSelect.contains(course));
//提示输入课程名称
System.out.println("请输入课程名称:");
String name= console.next();
//创建一个新的课程对象,ID和名称,与course对象完全一样
//Course course2 = new Course(course.id,course.name);
Course course2 = new Course();
course2.name = name;
System.out.println("新创建课程:"+course2.name);
System.out.println("备选课程中是否包含课程:"+course2.name+","+coursesToSelect.contains(course2));
}
//创建学生对象并选课
public void createStudentAndSelectCours() {
//创建一个学生对象
student = new Student("1","小明");
System.out.println("欢迎学生:"+student.name+"选课!");
//创建一个scanner对象,用来接收从键盘输入的课程ID
Scanner console = new Scanner(System.in); for(int i=0;i<3;i++) {
System.out.println("请输入课程ID");
String courseId = console.next();
for(Course cr:coursesToSelect) {
if(cr.id.equals(courseId)) {
student.courses.add(cr);
/**
set中,添加某个对象,无论添加多少次
最终只会保留一个该对象(的引用)
并且,保留的是第一次添加的那一个
**/
//student.courses.add(null);
//student.courses.add(cr);
}//if end
}//for end
}//最外层for end
}//createStudentAndSelectCours end
/*
* 测试Set的contains方法
*/
public void testSetContains() {
//提示输入课程名称
System.out.println("请输入学生已选的课程名称");
String name=console.next();
//创建一个新的课程对象,ID和名称,与course对象完全一样
Course course2 = new Course();
course2.name = name;
System.out.println("新创建课程:"+course2.name);
System.out.println("备选课程中是否包含课程:"+course2.name+","+student.courses.contains(course2));
//通过indexOf方法来取得某元素的索引位置
if(coursesToSelect.contains(course2)) {
System.out.println("课程:"+course2.name+"的索引位置为:"+coursesToSelect.indexOf(course2));
}
}//testSetContains end
public static void main(String[] args) {
//System.out.println("nihaoya");
SetTest st = new SetTest();
st.testAdd();
// st.testListContains();
// st.testForEach(); // st.createStudentAndSelectCours();
// st.testSetContains();
st.testListContains();
st.testForEach();
/*
res:
D:\javacode\code>java SetTest
取得课程:C语言
备选课程中是否包含课程:C语言,true
新创建课程:C语言
备选课程中是否包含课程:C语言,false
*/
/*st.testForEach();
//创建一个学生对象
Student student = new Student("1","小明");
System.out.println("欢迎学生:"+student.name+"选课!");
//创建一个Scanner对象,用来接收从键盘输入的课程ID
Scanner console = new Scanner(System.in);
for(int i=0;i<3;i++) {
System.out.println("请输入课程ID");
String courseId = console.next();
for(Course cr:st.coursesToSelect){
if(cr.id.equals(courseId)) {
student.courses.add(cr);*/
/**
* set中,添加某个对象,无论添加多少次
* 最终只会保留一个该对象(的引用)
* 并且,保留的是第一次添加的那一个
*/
//student.courses.add(cr);
//student.courses.add(null);
/*}//if end
}//里层的for
}//最外层的for st.testForEachForSet(student);*/
}//main end
public void testForEachForSet(Student student) {
//打印输出,学生所选的课程!
System.out.println("共选择了:"+student.courses.size()+"门课程!");
for(Course cr:student.courses) {
System.out.println("选择了课程:"+cr.id+":"+cr.name);
}
}
}