TECH_JAVAJAVA集合

3.4 Java 中的集合框架(上)(常用工具类)

2016-09-26  本文已影响112人  夏沫xx

1、Java中的集合框架概述

集合框架、

2、Collection接口&List接口简介

3、学生选课-创建学生类和课程类

package com.imooc.student;

import java.util.HashSet;
import java.util.Set;
/**
 * 学生类
 * @author bzz
 *
 */
public class Student {
    public String id;
    public String name;
    public Set courses;      //存储成绩信息
    public Student(String id,String name){
        this.id=id;
        this.name=name;
        this.courses=new HashSet();
    }
}
package com.imooc.student;
/**
 * 课程类
 * @author bzz
 *
 */
public class Course {
    public String id;
    /**
     * 实际开发中应当把所有属性私有化
     * private String id;
     * public String getId(){
     *      return id;
     * public void setId(String id){
     *      this.id=id;
     * }
     */
    
    public String name;
    public Course(String id,String name){
        this.id=id;
        this.name=name;
    }
}

4、学生选课-添加课程

package com.imooc.student;

import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
/**
 * 备选课程类
 * @author bzz
 *
 */
public class ListTest {
    public List coursesToSelect;//用于存放备选课程的List
    public ListTest(){
        this.coursesToSelect=new ArrayList();
    }
    // 用于往courseToSelect中添加备选课程

    public void testAdd(){
        //创建一个课程对象,并通过调用add,添加到备选课程List中

        Course cr1=new Course("1","数据结构");
        coursesToSelect.add(cr1);
        //对象存入集合都变成Object类型,去除时需要类型转换
        Course temp=(Course) coursesToSelect.get(0);
        System.out.println("添加了课程:"+temp.id+":"+temp.name);

        Course cr2=new Course("2","C语言");
        coursesToSelect.add(0,cr2);
        Course temp2=(Course) coursesToSelect.get(0);
        System.out.println("添加了课程:"+temp2.id+":"+temp2.name);
        
//      以下方法会抛出数组下标越界异常
//      Course cr3=new Course("3","test");
//      coursesToSelect.add(4,cr3);  
        
        Course[] course={new Course("3","离散数学"),new Course("4","汇编语言")};
        coursesToSelect.addAll(Arrays.asList(course));
        Course temp3=(Course) coursesToSelect.get(2);
        Course temp4=(Course) coursesToSelect.get(3);
        System.out.println("添加了两门课程"+temp3.id+":"+temp3.name+temp4.id+":"+temp4.name);
        
        Course[] course2={new Course("5","高等数学"),new Course("5","大学英语")};
        coursesToSelect.addAll(2,Arrays.asList(course2));
        Course temp5=(Course) coursesToSelect.get(2);
        Course temp6=(Course) coursesToSelect.get(3);
        System.out.println("添加了两门课程"+temp5.id+":"+temp5.name+temp6.id+":"+temp6.name);
    }
    
    public static void main(String[] args){
        ListTest lt=new ListTest();
        lt.testAdd();
    }
}

5、学生选课-课程查询

    /**
     * 取得List的元素的方法
     * @param args
     */
    public void testGet(){
        int size=coursesToSelect.size();
        System.out.println("有如下课程待选:");
        for(int i=0;i<size;i++){
            Course cr=(Course) coursesToSelect.get(i);
            System.out.println("课程:"+cr.id+":"+cr.name);
        }
    }
    
    /**
     * 通过迭代器来遍历List,不具备存储功能
     * @param args
     */
    public void testIterator(){
        //通过集合的iterator方法,取得迭代器的实例
        Iterator it=coursesToSelect.iterator();
        System.out.println("有如下课程待选(通过迭代器访问):");
        while(it.hasNext()){
            Course cr=(Course)it.next();
            System.out.println("课程:"+cr.id+":"+cr.name);
        }
    }
    
    /**
     * 通过for each方法访问集合元素
     * @param args
     */
    public void testForEach(){
        System.out.println("有如下课程待选(通过for each访问):");
        for(Object obj:coursesToSelect){
            Course cr=(Course)obj;
            System.out.println("课程:"+cr.id+":"+cr.name);
        }
    }
    
    private Iterator coursesToSelect() {
        // TODO Auto-generated method stub
        return null;
    }
    public static void main(String[] args){
        ListTest lt=new ListTest();
        lt.testAdd();
        lt.testGet();
        lt.testIterator();
        lt.testForEach();
    }
}

6、学生选课-课程修改

/**
     * 修改List中的元素
     */
    public void testModify(){
        coursesToSelect.set(4,new Course("7","毛概"));
    }

7、学生选课-课程删除

public void testRemove(){
        //删除方法1
//      Course cr=(Course)coursesToSelect.get(4);
//      System.out.println("我是课程:"+cr.id+":"+cr.name+"我即将被删除");
//      coursesToSelect.remove(cr);
        
        //删除方法2
//      System.out.println("即将被删除4位置的课程");
//      coursesToSelect.remove(4);
        
        //删除方法3
        System.out.println("即将被删除4和5位置的课程");
        Course[] courses={(Course)coursesToSelect.get(4),(Course)coursesToSelect.get(5)};
        coursesToSelect.removeAll(Arrays.asList(courses));
        System.out.println("成功删除课程!");
        testForEach();
    }

8、学生选课-应用泛型管理课程

package student;

import java.util.ArrayList;
import java.util.List;

public class TestGeneric {
    /**
     * 带有泛型——Course,的List类型属性,尖括号中是规定的存放类型
     */
    public List<Course> courses;
    
    public TestGeneric() {
        this.courses = new ArrayList<Course>();//初始化带有泛型的courses属性
    }
    
    /**
     * 测试添加
     */
    public void testAdd() {
        Course cr1 = new Course("1","大学语文");
        courses.add(cr1);
        //泛型集合中,不能添加泛型规定的类型及其子类型以外的对象,否则会报错!
//      courses.add("能否添加一些奇怪的东西呢??");
        Course cr2 = new Course("2","Java基础");
        courses.add(cr2);
    }
    
    /**
     * 测试循环遍历
     * 不是作为object类型取出而是规定的course类型
     */
    public void testForEach() {
        for (Course cr : courses) {
            System.out.println(cr.id + ":" + cr.name);
        }
    }
    
    /**
     * 泛型集合可以存入泛型类型、泛型的子类型
     * 泛型结合可以添加泛型的子类型的对象实例
     */
    public void testChild() {
        ChildCourse ccr = new ChildCourse();
        ccr.id = "3";
        ccr.name = "我是子类型的课程对象实例~~";
        courses.add(ccr);
    }
    
    /**
     * 泛型不能使用基本类型
     */
    public void testBasicType() {
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        System.out.println("基本类型必须使用包装类作为泛型!" + list.get(0));
    }
    /*
     * 泛型集合中的限定类型不能使用基本类型,必须是引用类型
     * 可以通过使用包装类(Interger、Long...)限定允许存入的基本类型
     */
    
    public static void main(String[] args) {
        TestGeneric tg = new TestGeneric();
        tg.testAdd();
        tg.testForEach();
        tg.testChild();
        tg.testForEach();
        tg.testBasicType();
    }
}

泛型集合中可以存入泛型类型、泛型的子类型
1、泛型集合中的限定类型,不能使用基本数据类型,只能是引用类型。
2、可以通过使用包装类限定允许存入的基本数据类型

9、学生选课-通过Set集合管理课程

package student;

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

import com.imooc.Course;
import com.imooc.Student;

/*
 * Set接口及其实现类HashSet
 * Set是元素无序并且不可以重复的集合,被称为集 
 * HashSet--哈希集,是Set的一个重要实现类
 */
/*
 * 案例功能说明
 * 提供备选课程
 * 创建学生对象,并给该学生添加三门课程(添加在学生的courses--Set类型的属性中)
 * --显示备选课程、循环三次,每次输入课程ID、
 * --往学生的courses属性中添加与输入的ID匹配的课程、输出学生选择的课程
 */
public class SetTest {
    
    public List<Course> coursesToSelect;
    private Scanner console;
    public Student student; 
    public SetTest() {
        coursesToSelect = new ArrayList<Course>();
        console = new Scanner(System.in);
    }
    
    /**
     * 用于往coursesToSelect中添加备选课程
     */
    public void testAdd() {
        //创建一个课程对象,并通过调用add方法,添加到备选课程List中
        Course cr1 = new Course("1" , "数据结构");
        coursesToSelect.add(cr1);
        Course temp = (Course) coursesToSelect.get(0);
//      System.out.println("添加了课程:" + temp.id + ":" + temp.name); 
        
        Course cr2 = new Course("2", "C语言");
        coursesToSelect.add(0, cr2);
        Course temp2 = (Course) coursesToSelect.get(0);
//      System.out.println("添加了课程:" + temp2.id + ":" + temp2.name);
        
//      coursesToSelect.add(cr1);
//      Course temp0 = (Course) coursesToSelect.get(2);
//      System.out.println("添加了课程:" + temp.id + ":" + temp.name); 
        
        
        //以下方法会抛出数组下标越界异常
//      Course cr3 = new Course("3", "test");
//      coursesToSelect.add(4, cr3);
        
        Course[] course = {new Course("3", "离散数学"), new Course("4", "汇编语言")};
        coursesToSelect.addAll(Arrays.asList(course));
        Course temp3 = (Course) coursesToSelect.get(2);
        Course temp4 = (Course) coursesToSelect.get(3);
        
//      System.out.println("添加了两门课程:" + temp3.id + ":" + 
//              temp3.name + ";" + temp4.id + ":" + temp4.name);
        
        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);
//      System.out.println("添加了两门课程:" + temp5.id + ":" + 
//              temp5.name + ";" + temp6.id + ":" + temp6.name);
        
    }
    
    /**
     * 通过for each方法访问集合元素
     * @param args
     */
    public void testForEach() {
        System.out.println("有如下课程待选(通过for each访问):");
        for (Object obj : coursesToSelect) {
            Course cr = (Course) obj;
            System.out.println("课程:" + cr.id + ":" + cr.name);
        }
    }
    
    public static void main(String[] args) {
        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) { //比对Course中coursesToSelect的每个元素
            if(cr.id.equals(courseId)) {
                student.courses.add(cr);
                    /**
                     * Set中,添加某个对象,无论添加多少次,
                     * 最终只会保留一个该对象(的引用),
                     * 并且,保留的是第一次添加的那一个
                     */
//                  student.courses.add(null);
//                  student.courses.add(cr);
                }
            }   
        }
        st.testForEachForSet(student);
    }
    public void testForEachForSet(Student student) {
        //打印输出,学生所选的课程!
        System.out.println("共选择了:" + student.courses.size() + "门课程!");
        for (Course cr : student.courses) {
            System.out.println("选择了课程:" + cr.id + ":" + cr.name);
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读