java集合中的set(基础)

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值