java集合中的set***
注:set中的很多方法与list大致相同,不过set中的元素无序且不可重复,所以没有list中插入特定位置的方法,并且也不能用get方法去访问集合元素,可以用迭代的方法去访问(更多方法信息可参考本人的博客list的增删改查)list的增删改查
package collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class setTest {
public List <Course> bxkc;
public setTest() {
bxkc = new ArrayList<Course>();
}
/*
* 用于往bxkc中添加备选课程
*/
public void testAdd() {
//创建课程类的实例 调用其构造器
Course co1 = new Course("1","数据结构");
//调用bxkc的add方法 进行添加
bxkc.add(co1);
//检查是否添加
Course temp = (Course) bxkc.get(0);
// System.out.println("添加了课程"+temp.id+":"+temp.name);
/**
* 第二种add方法
*/
Course co2 = new Course("2","c语言");
bxkc.add(0, co2);
//检查是否添加
Course temp2 = (Course) bxkc.get(0);
// System.out.println("添加了课程"+temp2.id+":"+temp2.name);
// Course co3 = new Course("2","c语言");
// //报错 报错 报错 数组下标越界
// bxkc.add(5, co3);
// Course temp3 = (Course) bxkc.get(0);
// System.out.println("添加了课程"+temp3.id+":"+temp3.name);
//创建一个课程数组
Course[] cou = {new Course("3","离散数学"),new Course("4","python")};
/*
* 另外两种添加方法addall
*/
bxkc.addAll(Arrays.asList(cou));
Course temp3 = (Course) bxkc.get(2);
Course temp4 = (Course) bxkc.get(3);
// System.out.println("添加了两门课程"+temp3.id+":"+temp3.name+";"+temp4.id+":"+temp4.name);
/**
* 插入指定位置的addall
*/
Course[] cou2 = {new Course("5","高等数学"),new Course("6","php")};
bxkc.addAll(2, Arrays.asList(cou2));
Course temp5 = (Course) bxkc.get(2);
Course temp6 = (Course) bxkc.get(3);
// System.out.println("添加了两门课程"+temp5.id+":"+temp5.name+";"+temp6.id+":"+temp6.name);
}
/**
* 用for each方法访问集合元素
* @param args
*/
public void testForeach() {
System.out.println("备选课程有:(for each方法):");
//定义一个Object的变量obj 遍历bxkc集合取出来作为object的变量
//当一个元素存入集合时类型被忽略 当Object用 需要强制类型转换
for(Object obj:bxkc) {
Course c1 = (Course) obj;
System.out.println("课程:"+c1.id+":"+c1.name);
}
}
public static void main(String[] args) {
setTest st =new setTest();
st.testAdd();
st.testForeach();
//创建一个学生对象
Student stu = new Student("1", "小明");
System.out.println("欢迎"+stu.name+"选课");
//创建scanner对象
Scanner sc = new Scanner(System.in);
//输入三门课程
for(int i = 0;i<3;i++) {
System.out.print("请输入选择课程的id:");
//新定义一个变量来接受输入的值
String idid = sc.next();
for(Course cr:st.bxkc) {
if(cr.id.equals(idid)) {
stu.courses.add(cr);
/**
* set中可添加空对象
*/
// stu.courses.add(null);
/**
* set中,添加某个对象,无论添加多少次
* 最终只会保留一个原对象(的引用)
* 并且保留的是第一次添加的那一个
*/
// stu.courses.add(cr);
}
}
}
//打印输出学生所选的课程
System.out.println("共选择了"+stu.courses.size()+"门课程");
for(Course cr:stu.courses)
System.out.println("选择了课程:"+cr.id+":"+cr.name);
}
}
Course类:
package collection;
/**
* @
* @author
* 课程类
*
*/
public class Course {
public String id;
public String name;
//方便演示改为public 实际开发中应该私有 用get/set方法访问
// //修改id
// public String getId() {
// return id;
// }
// //获取id
// public void setId(String id) {
// this.id = id;
// }
// //修改名称
// public String getName() {
// return name;
// }
// //获取名称
// public void setName(String name) {
// this.name = name;
// }
//构造器
public Course(String id,String name) {
this.id=id;
this.name=name;
}
//因为有了含参构造器,所以不会再自动生成无参构造器,但子类实现时需要调用无参构造器,所以在此手动创造无参构造器
public Course() {
}
}
学生类:
package collection;
import java.util.HashSet;
//引入set包
import java.util.Set;
/**
* 20190812
* @author
*学生类
*
*/
public class Student {
public String id;
public String name;
public Set <Course> courses;
//含参构造器
public Student(String id,String name) {
this.id=id;
this.name=name;
this.courses=new HashSet <Course>();
}
}