一、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 实现类<泛型>();