Java集合之Set应用举例

本文介绍了Java集合中的Set特性和使用方法,强调其无序和不允许重复的特性,对比了Set与List的区别,如无法通过索引修改元素。通过一个具体的例子展示了如何在Student类中使用Set存储选修课程,并提供了代码示例,详细解释了遍历和添加元素的过程。

一、Set相比于List就是无序且元素不可以重复所以因为无序性:
(1)Set不像List那样具有set()方法来修改指定元素
(2)Set遍历时不像List那样可以用get()方法。Set遍历时候只可以用ForEach和Interator迭代器的方法。
二、Set应用举例
以下的例子(1)首先创建了一个Student类,这个类里面定义了一个名字为courses的泛型Set集合,用来保存学生选到的课程。
(2)然后在测试类中定义了一个名字为coursesToSelect的泛型List集合,用于保存待选课程,这里用到的testAdd()方法添加待选课程以及teatForEach()方法来遍历这个List集合就和前面文章用的是一样的。
(3)然后利用输入的课程id编号与待选课程中的课程编号相比较,如果相同就加入到courses集合中。然后输出courses集合中的课程。
三、代码示例

package com.imooc.collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class SetTest {
	public List<Course>coursesToSelect ;//备选课程放在List中
	public SetTest() {
		coursesToSelect=new ArrayList<Course>();
	}
	public void testAdd() {
		//创建一个课程对象,并通过调用add方法,添加到备选课程List中
		Course cr1=new Course("1","数据结构");
		coursesToSelect.add(cr1);
		Course temp=(Course)coursesToSelect.get(0);
		Course cr2=new Course("2","C语言");
	    coursesToSelect.add(0, cr2);
		Course temp2=(Course)coursesToSelect.get(0);
		Course[]course= {new Course("3","离散数学"),new Course("4","汇编语言")};
		coursesToSelect.addAll(Arrays.asList(course));//这句话的目的是把数组变成List集合
		Course temp3=(Course)coursesToSelect.get(2);
		Course temp4=(Course)coursesToSelect.get(3);
		Course[]course2= {new Course("5","高等数学"),new Course("6","大学英语")};
		coursesToSelect.addAll(2, Arrays.asList(course2));//把数组转变成的集合插入到指定位置
		Course temp5=(Course)coursesToSelect.get(2);
		Course temp6=(Course)coursesToSelect.get(3);
	}
	public void testForEach() {
		System.out.println("有如下的课程待选择(通过ForEach遍历):");
		for(Object obj:coursesToSelect/*要遍历的集合取出元素给到Object变量*/) {
			Course cr=(Course) obj;
			System.out.println("课程:"+cr.id+":"+cr.name);
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SetTest st=new SetTest();
		st.testAdd();
		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) /*遍历整个待选课程List*//*其实coursesToSelect就是st对象下的一个属性,
			所以当然就可以用st.coursesToSelect来调用它*/{
				if(cr.id.equals(courseId)) {
					student.courses.add(cr);
				}
			}
		}
		st.testForEachSet(student);
	}
   public void testForEachSet(Student student) {
	 //打印输出,学生所选课程
	   for(Course cr:student.courses) {
			System.out.println("选择了课程:"+cr.id+":"+cr.name);
		}
   }
		//打印输出,学生所选课程
		
	}



解释代码:
(1)for(Course cr:st.coursesToSelect) 遍历整个待选课程List
因为coursesToSelect这个List集合就是在SetTest这个类中定义的一个属性,而st又是SetTest类的一个实例,所以其实coursesToSelect就是st对象下的一个属性。所以当然就可以用st.coursesToSelect来调用它。
(2)public SetTest() {
coursesToSelect=new ArrayList();
}
这事构造器,无论是什集合,在构造器里给集合赋初值的时候用的语法都是
集合名字=new 实现类<泛型>();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值