java集合框架代码演示demo

本文通过具体实例演示了Java集合框架的使用方法,包括List、Set、Map和泛型的运用,详细介绍了各种集合类型的特性及操作方法。

这里的代码演示可以结合前面写的关于集合的文章;原本是想分别对应把代码放到相应的地方的,恩,由于我有点懒,就直接放在这儿了。
Student类:

package zyf.com;

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

public class Student {
public String id;
public String name;
Set<Course> courses;
public Student(String id,String name){
    this.id=id;
    this.name=name;
    this.courses=new HashSet<Course>();
}
}

Course类:

package zyf.com;

public class Course {
public String id;
public String name;
public Course(){}
//有参构造方法
public Course(String id,String name){
    this.id=id;
    this.name=name;
}
@Override
public boolean equals(Object obj) {
    //如果传入的比较对象跟被比较对象是==的,既两个对象的内存都一样,肯定是相同一个,则返回true
    if(this==obj){
        return true;
    }
    //如果传入比较的对象是空值,则返回false
    if(obj==null){
        return false;
    }
    //如果传入的比较对象跟被比较对象是同一类型就把比较对象转换成被比较对象类型,返回根据对象能确定唯一的元素比较值
    //最后都不满足返回false
    if(!(obj instanceof Course)){
        return false;
    }
    Course other=(Course)obj;//强转
    //判断属性值是否相等,首先当前对象如果为空,再判断传过来的值的属性是否为空,如果不为空,则返回false
    //否则当前对象如果不为空,再判断当前对象属性值是否和传过来的对象的属性值相等,不等,返回false
    if(name==null){
        if(other.name!=null){
            return false;
        }else if(!name.equals(other.name)){
            return false;
        }
    }
    return true;
}

}

ListTest类:

package zyf.com;

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

public class ListTest {

    public List courseToSelect;
    public ListTest(){
        this.courseToSelect=new ArrayList();
    }
    public void testAdd(){
        Course cr1=new Course("1","数据结构");
        courseToSelect.add(0,cr1);
        Course temp=(Course) courseToSelect.get(0);
        System.out.println("添加的课程:"+temp.id+":"+temp.name);

        Course cr2=new Course("2","Java语言");
        courseToSelect.add(0, cr2);
        Course temp2=(Course) courseToSelect.get(0);
        System.out.println("添加的课程:"+temp2.id+":"+temp2.name);

        Course[] courses={new Course("3","离散数学"),new Course("4","汇编语言")};
        courseToSelect.addAll(Arrays.asList(courses));
        Course temp3=(Course) courseToSelect.get(2);
        Course temp4=(Course) courseToSelect.get(3);
        System.out.println("添加了两门课程:"+temp3.id+":"+temp3.name+";"+temp4.id+":"+temp4.name);

        Course cr5=new Course("5","数据结构");
        courseToSelect.add(1,cr5);
        Course temp5=(Course) courseToSelect.get(1);
        System.out.println("添加的课程:"+temp5.id+":"+temp5.name);

        Course[] courses1={new Course("6","javaweb开发"),new Course("7","Android开发")};
        courseToSelect.addAll(Arrays.asList(courses1));
        Course temp6=(Course) courseToSelect.get(5);
        Course temp7=(Course) courseToSelect.get(6);
        System.out.println("添加了两门课程:"+temp6.id+":"+temp6.name+";"+temp7.id+":"+temp7.name);

    }
    public void testGet(){
        int size=courseToSelect.size();
        System.out.println();
        System.out.println("for循环遍历List有如下可选课程:");
        for(int i=0;i<size;i++){
            Course cr=(Course) courseToSelect.get(i);
            System.out.println("课程:"+cr.id+":"+cr.name);
        }
    }
    public void testIterater(){
        System.out.println();
        System.out.println("迭代器遍历List有如下可选课程:");
        Iterator it=courseToSelect.iterator();
        while(it.hasNext()){
            Course cr=(Course) it.next();
            System.out.println("课程:"+cr.id+":"+cr.name);
        }
    }
    public void testForEach(){
        System.out.println();
        System.out.println("ForEach遍历List有如下可选课程:");
        //当一个元素存到集合中去,它的类型是被忽略的。所以用Object类型
        for(Object obj:courseToSelect){
            Course cr=(Course)obj;//强转
            System.out.println("课程:"+cr.id+":"+cr.name);
        }
    }
    public void testModify(){
        courseToSelect.set(1, new Course("5","大学英语"));

    }
    public void testRemove(){
        //Course cr=(Course) courseToSelect.get(1);
        Course[] crs={(Course) courseToSelect.get(0),(Course) courseToSelect.get(1)};
        courseToSelect.removeAll(Arrays.asList(crs));
        System.out.println();
        //System.out.println("我是课程:"+cr.id+":"+cr.name+",我即将被删除!");
        //courseToSelect.remove(cr);
        System.out.println("成功删除课程!");
        testForEach();
    }

    public static void main(String[] args) {
        ListTest lt=new ListTest();
        lt.testAdd();
        lt.testGet();
        lt.testIterater();      
        lt.testForEach();
        lt.testModify();
        lt.testForEach();
        lt.testRemove();
    }

}

GenericTest类:(泛型)

package zyf.com;

import java.util.ArrayList;
import java.util.List;
//泛型
//泛型集合中不能添加泛型规定类型及其子类型以外的对象,否则会报错。
//泛型不能使用基本类型,只能使用包装类或者自定义的类
public class GenericTest {
public List<Course> courses;
public GenericTest(){
    this.courses=new ArrayList<Course>();
}
public void testAdd(){
    Course cr=new Course("1","语文");
    courses.add(cr);
    Course cr2=new Course("2","数学");
    courses.add(cr2);
    ChildCourse ccr=new ChildCourse();
    ccr.id="3";
    ccr.name="我是泛型集合的子类";
    courses.add(ccr);
}

public void testforEach(){
    for(Course cr:courses){
        System.out.println(cr.id+":"+cr.name);
    }
}
    public static void main(String[] args) {
        GenericTest gt=new GenericTest();
        gt.testAdd();
        gt.testforEach();
    }

}

SetTest类:

package zyf.com;

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

public class SetTest {
public List<Course> courses;
public SetTest(){
    this.courses=new ArrayList<Course>();
}
public void add(){
    Course cr=new Course("1","离散数学");
    courses.add(cr);
    Course temp=courses.get(0);

    Course cr2=new Course("2","Java语言");
    courses.add(1, cr2);
    Course temp2=courses.get(1);

    Course[] crs={new Course("3","大学英语"),new Course("4","软件设计"),new Course("5","软件测试")};
    courses.addAll(2,Arrays.asList(crs));
    Course temp3=courses.get(2);
    Course temp4=courses.get(3);
    Course temp5=courses.get(4);

}
public void forEach(){
    for(Course cr:courses){
        System.out.println("课程:"+cr.id+":"+cr.name);
    }
}
public void testForEachForSet(Student stu){
    System.out.println("选择了"+stu.courses.size()+"门课程!");
    for(Course cr:stu.courses){
        System.out.println("选择了课程:"+cr.id+":"+cr.name);
    }
}
public void testSetContains(){
    //提示输入课程名称
    System.out.println("请输入学生已选课程名称:");
    Scanner sc=new Scanner(System.in);
    String name=sc.next();
    //创建一个新的课程对象,id和名称与course对象完全一致
    Course cr2=new Course();
    cr2.name=name;
    System.out.println("新创建的课程:"+cr2.name);
    System.out.println("备选课程中是否包含课程:"+cr2.name+","+courses.contains(cr2));

}   



public static void main(String[] args) {
        SetTest st=new SetTest();
        st.add();
        st.testSetContains();
        st.forEach();
        Student stu=new Student("1","小明");
        System.out.println("欢迎学生:"+stu.name+"来选课!");
        Scanner sc=new Scanner(System.in);
        for(int i=0;i<3;i++){
            System.err.println("请输入课程id");
            String crId=sc.next();
            for(Course cr:st.courses){
                if(cr.id.equals(crId)){
                    stu.courses.add(cr);
                    //Set中,添加某个对象,无论添加多少次, 最终只会保留一个该对象(的引用), 并且,保留的是第一次添加的那一个
                    //stu.courses.add(cr);
                }
            }                       
        }
        st.testForEachForSet(stu);

    }

}

MapTest类:

package zyf.com;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

public class MapTest {
public Map<String,Student> stus;
public MapTest(){
    this.stus=new HashMap<String,Student>();
}
//添加学生
public void add(){
    //创建一个Scanner对象,用于获取学生id和姓名
    Scanner sc=new Scanner(System.in);
    int i=0;
    while(i<3){
        System.out.println("请输入学生id:");
        String id=sc.next();
        //判断该id是否被占用
        Student stu=stus.get(id);
        if(stu==null){
            //提示输入学生姓名
            System.out.println("请输入学生姓名:");
            String name=sc.next();
            //创建新的学生对象
            Student newStu=new Student(id,name);
            //添加学生到map中
            stus.put(id, newStu);
            System.out.println("成功添加学生:"+stus.get(id).name);
            i++;

        }else{
            System.out.println("该id已被占用!");
            continue;
        }
    }
}
//通过KeySet方法遍历Map
public void testKeySet(){
    //通过KetSet方法,返回Map中的所有“键”的Set集合(Set集合无序且不可重复)
    Set<String> ketSet=stus.keySet();
    //取得stus的容量
    System.out.println("总共有:"+stus.size()+"个学生");
    //遍历ketSet,取得每一个键,再调用get()方法取得每个键对应的值value
    for(String stuId:ketSet){
        Student st=stus.get(stuId);
        if(st!=null){
            System.out.println("学生:"+st.name);
        }
    }
}
//删除学生
public void testRemove(){

    Scanner sc=new Scanner(System.in);
    while(true){
        //提示输入待删除的学生id
        System.out.println("请输入要删除的学生id:");
        String id=sc.next();
        //判断id是否有对应的学生对象
        Student st=stus.get(id);
        if(st==null){
            //提示输入的id不存在
            System.out.println("该id不存在!");
            continue;
        }
        stus.remove(id);
        System.out.println("成功删除学生"+st.name);
        break;
    }
}
//通过EntrySet方法遍历Map
public void testEntrySet(){
    //通过entrySet方法,返回Map中所有的键值对
    Set<Entry<String,Student>> entrySet=stus.entrySet();
    for(Entry<String,Student>entry:entrySet ){
        System.out.println("取得键:"+entry.getKey()+"   取得值:"+entry.getValue().name);
    }
}
//修改学生
public void testModify(){
    System.out.println("请输入要修改的学生id:");
    Scanner sc=new Scanner(System.in);
    while(true){
        String id=sc.next();
        Student stu=stus.get(id);
        if(stu==null){
            System.out.println("不存在该学生id,请重新输入!");
            continue;
        }
        //提示当前学生对象对应的姓名
        System.out.println("当前该学生id所对应的学生姓名为:"+stu.name);
        //提示输入新的学生姓名来修改已有的映射
        System.out.println("请输入新的学生姓名:");
        String name=sc.next();
        Student newStu=new Student(id,name);
        stus.put(id, newStu);
        System.out.println("修改成功!");
        break;
    }
}
public static void main(String[] args) {
    MapTest mt=new MapTest();
    mt.add();
    mt.testKeySet();
    mt.testRemove();
    mt.testEntrySet();
    mt.testModify();
    mt.testEntrySet();
    }

}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值