原CSDN博客已弃用,文章会逐渐迁移过来。

转帖请注明本文出自weimeig的博客(http://blog.csdn.net/weimeig/article/details/79535273),请尊重他人的辛勤劳动成果,谢谢

应朋友们反馈的JAVA基础薄弱的问题,决定出一套完整的JAVA基础教程,帮助大家复习,巩固JAVA基础,今天要讲的是JAVA中的Set集合。

ArrayList是有序的集合,而Set是无序的集合

有序的集合ArrayList中可以添加多个相同对象(的引用)

而Set中,添加某个对象,无论添加多少次, 最终只会保留一个该对象(的引用)

并且,保留的是第一次添加的那一个

import java.util.HashSet;  
import java.util.Set;  

/** 
 * 学生类 
 * @author Administrator 
 * 
 */  
public class Student {  
    private String id;  
    private String name;  
    private Set<Course> course;  
    Student(String id,String name){  
        this.id = id;  
        this.name = name;  
        this.course = new HashSet<Course>();    
    }  
    public String getId() {  
        return id;  
    }  
    public void setId(String id) {  
        this.id = id;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public Set getCourse() {  
        return course;  
    }  
    public void setCourse(Set course) {  
        this.course = course;  
    }  
}  

/** 
 * 课程类 
 * @author Administrator 
 * 
 */  
public class Course {  
    private String id;  
    private String name;  
    Course(){  

    }  
    Course(String id,String name){  
        this.id=id;  
        this.name=name;  
    }  
    public String getId() {  
        return id;  
    }  
    public void setId(String id) {  
        this.id = id;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  

}  

import java.util.ArrayList;  
import java.util.Arrays;  
import java.util.List;  
import java.util.Scanner;  


public class SetTest {  
    public List<Course> coursesToSelect;  
    public SetTest(){  
        this.coursesToSelect = new ArrayList<Course>();  
    }  
    /** 
     * 用于往coursesToSelect中添加备选课程 
     */  
    public void testAdd(){  
        Course cr1 = new Course("1","数据结构");//new一个Course类的数据类型  
        coursesToSelect.add(cr1);//所为一条数据插入List中  
        Course temp = (Course)coursesToSelect.get(0);//获取LIst中的第一条数据\  

        Course cr2 = new Course("2","C语言");  
        coursesToSelect.add(0, cr2); //两个参数的add方法,选择插入元素的位置  
        Course temp2 = (Course) coursesToSelect.get(0);//将元素插入到第一条,对象存入集合都变成Object类型,取出时需要类型转换  

        Course[] course = {new Course("3","离散数学"), new Course("4","汇编语言")};  
        coursesToSelect.addAll(Arrays.asList(course));  //添加数组用addAll  
        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);  
    }  

    /** 
     * 通过for each方法访问集合元素 
     * 迭代器的简便写法 
     * @param args 
     */  
    public void testForEach(){  
        System.out.println("有如下课程可选(通过for each访问):");  
        for(Object obj:coursesToSelect){//去遍历coursesToSelect集合中的每一个元素,把它取出来作为Object的一个变量  
            //(当一个元素存入到集合中的时候,他的类型是被忽略了的,集合只是拿他当Object用),当取出来的时候也是一个Object,因此  
            Course cr =(Course)obj;//当他取出来后,需要做强转  
            System.out.println("课程:" + cr.getId() + ":" + cr.getName());  
        }  
    }  

    public static void main(String []args){  
        SetTest st =new SetTest();  
        st.testAdd();  
        st.testForEach();  
        //创建一个学生对象  
        Student student = new Student("1","小明");  
        System.out.println("欢迎学生:" + student.getName() + "选课!");  
        //创建一个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.getId().equals(courseId)){  
                    student.getCourse().add(cr);  
//                  student.getCourse().add(cr);  
                    /** 
                     * Set中,添加某个对象,无论添加多少次, 
                     * 最终只会保留一个该对象(的引用) 
                     * 并且,保留的是第一次添加的那一个 
                     */  
//                  student.getCourse().add(null);Set中是允许添加null空对象的  

                }  
            }  
        }  

        st.testForEachForSet(student);  
    }  

    public void testForEachForSet(Student student){  
        //打印输出,学生所选的课程!  
        System.out.println("共选择了" + student.getCourse().size() + "门课程");  
        for(Object obj : student.getCourse()){  
            Course cr = (Course)obj;  
            System.out.println("选择了课程:" + cr.getId() + ":" +cr.getName());  
        }  
    }  
}