JAVA按以下重要顺序
· 面向对象
· 类集框架
· JDBC
· 文件编程
本季目标
主要讲解以下的内容:
· Collection
· List
· Set
· Map
· Iterator
· ListIteator
· Enumeration
· for…each语句(JDK 1.5的新特性)
· Comparable接口
· 二叉树
1、类集结构
(1)类集的产生目的
类集简单来讲就是一个动态的对象数组,此对象数组可以改变大小,可以任意的实现对象的增加、删除、输出。所有的类集存放java.util包中。
(2)类集的划分
1、存放单值:Collection
2、存放一对值:Map
3、输出:Iterator
(3)类集的具体概念
<1>Collection(只能存放一个值)
|- 主要功能:用于输出使用
|- 子接口:List(允许有重复的元素,而且加入的顺序就是输出的顺序)
    |- 子类:ArrayList,是在Java 2之后推出的,是新的类,是使用异步处理方式,其性能较高
    |- 子类:Vector,是在JDK 1.0的时候就推出,因为是旧的类,有很多List所没有的功能,是使用同步处理方式,其线程安全性较高,会比较慢。使用Vector除了可以使用Iterator输出之外,也可以使用Enumeration进行输出。两者是通用的。Vector子类允许直接使用addElement(Object obj),也是可以向集合中加入元素的。
    |- 自己新增的方法:
        |- 取每一个对象:public Object get(int ind) ;
    |- 子类:Stack(栈)
|- 子接口:Set(不允许有重复元素,重复元素会替换)?如何可以区分重复元素呢? 
    |- 子类:HashSet:是无序列存放
    |- 子类:TreeSet:有序存放,是通过Comparable接口完成的
|- 常用方法:
    |- 增加一个对象:public boolean add(Object obj)
    |- 取得类集的长度:public int size() ;
    |- 判断集合中的内容是否为空:public boolean isEmpty()
    |- 删除一个对象:public boolean remove(Object obj) :就必须牵扯到对象的比较状态。
    |- 实例化Iterator对象:public Iterator iterator() ;
<2>JDK 1.5提供了一个方便的输出操作:for…each语句。
<3>Iterator接口输出是最常见的

|- 常用方法
    |- public boolean hasNext():判断是否有下一个元素
    |- public Object next():取出下一个元素
|- 子接口:ListIterator,可以进行双向输出,只对于List接口有用
    |- 常用方法:具备了Iterator接口中的全部内容
        |- public boolean hasPrevious()
        |- public Object previous() 
<4>Enumeration(在1.5之后也加入、泛型支持哈~)
|- 常用方法:
    |- 判断是否有下一个元素:public boolean hasMoreElements()
    |- 取出元素:public Object element()
5、 Map(存放一对值)
|- 功能:与Collection的功能不一样,Map的主要功能是用于查找使用的。
|- 注意点: 
    |- 使用Map操作时,不能直接使用Iterator进行输出。
    |- 而且里面不能有重复key。
    |- 如果非要使用Iterator进行输出,则必须按以下的步骤进行操作:
|- Map --> Set --> Iterator --> Map.Entry --> key与value的分离
|- 常用子类:
    |- HashMap:无序存放,是新的类,是JDK 1.2时推出的,是异步处理,性能较高
    |- Hashtable:是旧的类,是JDK 1.0时推出的,是线程安全的,性能较低
        |- Properties(重点):属性文件操作类
    |- TreeMap:有序存放
|- 常用方法:
    |- 向集合中保存数据:public Object put(Object key,Object value):返回的是value
    |- 从集合中查找数据:public Object get(Object key):根据key查找。
    |- 将Map数据变为Set实例:Set<Map.Entry<K,V>> entrySet()
    |- 将全部的key变为set实例:Set<K> keySet()
    |- 将全部的vlaue变为Collection接口实例:Collection<V> values()
|- Map.Entry:保存key与value
    |- public Object getKey()
    |- public Object getValue()
|- 存放key的注意点:
################Michael分割线####################
2、代码讲解
(6)实例一
例如,一个学校里有多个学生?问如何可以表现出关系
一对多哈,类似数据库
import java.util.*;    
class School{    
        private String name;    
        //一个学校有多个学生    
        private List<Student> allStudents;    
        public School(String name){    
                this.setName(name);    
                this.setAllStudents(new ArrayList<Student>());    
        }    
        //向学校中加入学生    
        public void add(Student stu){    
                this.allStudents.add(stu);    
        }    
        public void setName(String name){    
                this.name = name;    
        }    
        public String getName(){    
                return this.name;    
        }    
        public void setAllStudents(List<Student> allStudents){    
                this.allStudents = allStudents;    
        }    
        public List<Student> getAllStudents(){    
                return this.allStudents;    
        }    
}    
class Student{    
        private String name;    
        private int age;    
        //一个学生属于一个学校    
        private School school;    
        public Student(String name,int age){    
                this.setName(name);    
                this.setAge(age);    
        }    
        public void setName(String name){    
                this.name = name;    
        }    
        public String getName(){    
                return this.name;    
        }    
        public void setAge(int age){    
                this.age = age;    
        }    
        public int getAge(){    
                return this.age;    
        }    
        public void setSchool(School school){    
                this.school = school;    
        }    
        public School getSchool(){    
                return this.school;    
        }    
}    
public class Demo11{    
        public static void main(String[] args){    
                School sch = new School("51cto");    
                Student stu1 = new Student("张三",20);    
                Student stu2 = new Student("李四",25);    
                Student stu3 = new Student("王五",23);    
                Student stu4 = new Student("赵六",28);    
                Student stu5 = new Student("孙七",35);    
                //设置关系    
                sch.add(stu1);    
                stu1.setSchool(sch);    
                sch.add(stu2);    
                stu2.setSchool(sch);    
                sch.add(stu3);    
                stu3.setSchool(sch);    
                sch.add(stu4);    
                stu4.setSchool(sch);    
                sch.add(stu5);    
                stu5.setSchool(sch);    
                //肯定此时可以从一个学校里打印出全部的学生信息    
                //学生也可以清楚的知道自己属于哪一个学校    
                System.out.println("学校名称:"+sch.getName());    
                List<Student> all = sch.getAllStudents();    
                Iterator<Student> iter = all.iterator();    
                while(iter.hasNext()){    
                        Student s = iter.next();    
                        System.out.println("\t|- 学生姓名:"+s.getName()+",年龄:"+s.getAge());    
                }    
        }    
}
看下效果:
我们也可以通过学生查找学校信息哈~
import java.util.*;    
class School{    
        private String name;    
        //一个学校有多个学生    
        private List<Student> allStudents;    
        public School(String name){    
                this.setName(name);    
                this.setAllStudents(new ArrayList<Student>());    
        }    
        //向学校中加入学生    
        public void add(Student stu){    
                this.allStudents.add(stu);    
        }    
        public void setName(String name){    
                this.name = name;    
        }    
        public String getName(){    
                return this.name;    
        }    
        public void setAllStudents(List<Student> allStudents){    
                this.allStudents = allStudents;    
        }    
        public List<Student> getAllStudents(){    
                return this.allStudents;    
        }    
}    
class Student{    
        private String name;    
        private int age;    
        //一个学生属于一个学校    
        private School school;    
        public Student(String name,int age){    
                this.setName(name);    
                this.setAge(age);    
        }    
        public void setName(String name){    
                this.name = name;    
        }    
        public String getName(){    
                return this.name;    
        }    
        public void setAge(int age){    
                this.age = age;    
        }    
        public int getAge(){    
                return this.age;    
        }    
        public void setSchool(School school){    
                this.school = school;    
        }    
        public School getSchool(){    
                return this.school;    
        }    
}    
public class Demo11{    
        public static void main(String[] args){    
                School sch = new School("51cto");    
                Student stu1 = new Student("张三",20);    
                Student stu2 = new Student("李四",25);    
                Student stu3 = new Student("王五",23);    
                Student stu4 = new Student("赵六",28);    
                Student stu5 = new Student("孙七",35);    
                //设置关系    
                sch.add(stu1);    
                stu1.setSchool(sch);    
                sch.add(stu2);    
                stu2.setSchool(sch);    
                sch.add(stu3);    
                stu3.setSchool(sch);    
                sch.add(stu4);    
                stu4.setSchool(sch);    
                sch.add(stu5);    
                stu5.setSchool(sch);    
                //肯定此时可以从一个学校里打印出全部的学生信息    
                //学生也可以清楚的知道自己属于哪一个学校    
                System.out.println("学校名称:"+sch.getName());    
                List<Student> all = sch.getAllStudents();    
                Iterator<Student> iter = all.iterator();    
                while(iter.hasNext()){    
                        Student s = iter.next();    
                        System.out.println("\t|- 学生姓名:"+s.getName()+",年龄:"+s.getAge()+"-->"+s.getSchool().getName());    
                }    
        }    
}
这是典型的双向关系模型哈~
 
进一步扩展呢?一个学校有多个班级,一个班级有多个学生?
import java.util.*;    
class School{    
        private String name;    
        //一个学校有多个学生    
        private List<Cls> allClss;    
        public School(String name){    
                this.setName(name);    
                this.setAllClss(new ArrayList<Cls>());    
        }    
        //向学校中加入学生    
        public void add(Cls cls){    
                this.allClss.add(cls);    
        }    
        public void setName(String name){    
                this.name = name;    
        }    
        public String getName(){    
                return this.name;    
        }    
        public void setAllClss(List<Cls> allClss){    
                this.allClss = allClss;    
        }    
        public List<Cls> getAllClss(){    
                return this.allClss;    
        }    
}    
class Cls{    
        private String name;    
        private School school;    
        private List<Student> allStudents;    
        public Cls(String name){    
                this.setName(name);    
                this.setAllStudents(new ArrayList<Student>());    
        }    
        //向班级中加入学生    
        public void add(Student stu){    
                this.allStudents.add(stu);    
        }    
        public List<Student> getAllStudents(){    
                return this.allStudents;    
        }    
        public void setAllStudents(List<Student> allStudents){    
                this.allStudents = allStudents;    
        }    
        public void setSchool(School school){    
                this.school = school;    
        }    
        public School getSchool(){    
                return this.school;    
        }    
        public void setName(String name){    
                this.name = name;    
        }    
        public String getName(){    
                return this.name;    
        }    
}    
class Student{    
        private String name;    
        private int age;    
        //一个学生属于一个学校    
        private Cls cls;    
        public Student(String name,int age){    
                this.setName(name);    
                this.setAge(age);    
        }    
        public void setName(String name){    
                this.name = name;    
        }    
        public String getName(){    
                return this.name;    
        }    
        public void setAge(int age){    
                this.age = age;    
        }    
        public int getAge(){    
                return this.age;    
        }    
        public void setCls(Cls cls){    
                this.cls = cls;    
        }    
        public Cls getCls(){    
                return this.cls;    
        }    
}    
public class Demo12{    
        public static void main(String[] args){    
                School sch = new School("51cto");    
                Cls c1 = new Cls("Java一班");    
                Cls c2 = new Cls("Java二班");    
                Cls c3 = new Cls("Java三班");    
                Student stu1 = new Student("张三",20);    
                Student stu2 = new Student("李四",25);    
                Student stu3 = new Student("王五",23);    
                Student stu4 = new Student("赵六",28);    
                Student stu5 = new Student("孙七",35);    
                //设置关系    
                sch.add(c1);    
                c1.setSchool(sch);    
                sch.add(c2);    
                c2.setSchool(sch);    
                sch.add(c3);    
                c3.setSchool(sch);    
                c1.add(stu1);    
                stu1.setCls(c1);    
                c2.add(stu2);    
                stu2.setCls(c2);    
                c2.add(stu3);    
                stu3.setCls(c2);    
                c3.add(stu4);    
                stu4.setCls(c3);    
                c3.add(stu5);    
                stu5.setCls(c3);    
                //如果要输出全部的内容,则肯定要进行双重循环    
                System.out.println("学校名称:"+sch.getName());    
                Iterator<Cls> iter1 = sch.getAllClss().iterator();    
                while(iter1.hasNext()){    
                        Cls c = iter1.next();    
                        System.out.println("\t|- 班级名称:"+c.getName());    
                        //输出一个班级中的全部学生    
                        Iterator<Student> iter2 = c.getAllStudents().iterator();    
                        while(iter2.hasNext()){    
                                Student s = iter2.next();    
                                System.out.println("\t\t|- 学生姓名:"+s.getName()+",学生年龄:"+s.getAge()+" --> "+s.getCls().getSchool().getName());    
                        }    
                }    
        }    
}
看下效果:
(7)实例二
例如有一种情况:
一个学生可以选多门课程,一门课程允许有多个学生参加。
import java.util.*;    
class Student{    
        private String name;    
        private int age;    
        //一个学生可以选多门课程    
        private List<Course> allCourses;    
        public Student(String name,int age){    
                this.setName(name);    
                this.setAge(age);    
                this.setAllCourses(new ArrayList<Course>());    
        }    
        public void add (Course course){    
                this.allCourses.add(course);    
        }    
        public void setName(String name){    
                this.name = name;    
        }    
        public String getName(){    
                return this.name;    
        }    
        public void setAge(int age){    
                this.age = age;    
        }    
        public int getAge(){    
                return this.age;    
        }    
        public void setAllCourses(List<Course> allCourses){    
                this.allCourses = allCourses;    
        }    
        public List<Course> getAllCourses(){    
                return this.allCourses;    
        }    
}    
class Course{    
        private String name;    
        private float grade;    
        private List<Student> allStudents;    
        public Course(String name,float grade){    
                this.setName(name);    
                this.setGrade(grade);    
                this.setAllStudents(new ArrayList<Student>());    
        }    
        public void add(Student student){    
                this.allStudents.add(student);    
        }    
        public void setName(String name){    
                this.name = name;    
        }    
        public void setGrade(float grade){    
                this.grade = grade;    
        }    
        public void setAllStudents(List<Student> allStudents){    
                this.allStudents = allStudents;    
        }    
        public String getName(){    
                return this.name;    
        }    
        public float getGrade(){    
                return this.grade;    
        }    
        public List<Student> getAllStudents(){    
                return this.allStudents;    
        }    
}    
public class Demo13{    
        public static void main(String[] args){    
                Student stu1 = new Student("张三",20);    
                Student stu2 = new Student("李四",25);    
                Student stu3 = new Student("王五",23);    
                Student stu4 = new Student("赵六",28);    
                Student stu5 = new Student("孙七",35);    
                Course c1 = new Course("JAVA SE 基础",2.0f);    
                Course c2 = new Course("JAVA EE WEB",3.0f);    
                Course c3 = new Course("分布式开发 ",5.0f);    
                //设置关系    
                stu1.add(c1);    
                c1.add(stu1);    
                stu1.add(c2);    
                c2.add(stu1);

stu2.add(c2);    
                c2.add(stu2);

stu3.add(c1);    
                c1.add(stu3);    
                stu3.add(c2);    
                c2.add(stu3);    
                stu3.add(c3);    
                c3.add(stu3);

stu4.add(c3);    
                c3.add(stu4);    
                stu5.add(c3);    
                c3.add(stu5);    
                //随便验证一个学生所选择的课程以及一门课程所参加的学生    
                System.out.println("学生姓名:"+stu1.getName());    
                Iterator<Course> iter1 = stu1.getAllCourses().iterator();    
                while(iter1.hasNext()){    
                        Course c = iter1.next();    
                        System.out.println("\t|- 课程名称:"+c.getName()+",学分:"+c.getGrade());    
                }    
                System.out.println("课程名称:"+c3.getName());    
                Iterator<Student> iter2 = c3.getAllStudents().iterator();    
                while(iter2.hasNext()){    
                        Student s = iter2.next();    
                        System.out.println("\t|- 学生姓名:"+s.getName()+",学生年龄:"+s.getAge());    
                }    
        }    
}

看下效果:
#####################Michael分割线#########################

转载于:https://blog.51cto.com/redking/139795

[零基础学JAVA]Java SE应用部分-35.JAVA类集之二相关推荐

  1. 零基础带你学习MySQL—多表查询笛卡尔集(二十)

    零基础带你学习MySQL-多表查询笛卡尔集(二十) 一.多表查询 多表查询:就是指基于两个和两个以上的表的查询,在实际应用中,单个表并不能满足你的需求,我们经常需要在很多个表之间查询数据 二.笛卡尔集 ...

  2. 零基础学手绘彩铅,这些技巧美术集网校都整理好了,收藏起来吧~

    对于刚刚入门学习手绘彩铅的同学,可能会遇上很多问题,比如颜色怎么搭配:怎么重叠颜色?彩铅画为什么画不了很艳丽的颜色?等一些问题.彩铅其实和普通的铅笔是一样的,在手绘时也是一个比较容易掌握的绘画工具.利 ...

  3. 零基础学python编程思维(九) | 面向对象的编程——类

    对象可以包含任意数量和类型的数据.Python在尽可能不增加新的语法和语义的情况下加入了类机制,类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以 ...

  4. 零基础学鸿蒙编程-UI控件_DatePicker

    什么是DatePicker DatePicker是一种日期滚轮式选择器.常见效果如下: 1.基本用法 效果图 代码 <DatePickerohos:height="match_cont ...

  5. [零基础学JAVA]Java SE实战开发-37.MIS信息管理系统实战开发[JDBC](1)

    MIS信息管理系统实战开发之使用MySQL实现保存 开发背景 ID.姓名.年龄为公共信息,而学生有成绩,工人有工资 定义一个抽象类Person(ID.姓名.年龄),学生是其子类,有成绩,工人是其子类有 ...

  6. [零基础学JAVA]Java SE实战开发-37.MIS信息管理系统实战开发[文件保存](1)

    MIS信息管理系统实战开发之单独使用文件实现保存 开发背景 ID.姓名.年龄为公共信息,而学生有成绩,工人有工资 定义一个抽象类Person(ID.姓名.年龄),学生是其子类,有成绩,工人是其子类有工 ...

  7. java无线电台RS制信号_中国MOOC_零基础学Java语言_第2周 判断_2信号报告

    2 信号报告(5分) 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength)    信号强度即大小. 其中R位于报告第一 ...

  8. 零基础学java培训怎么选择学校

    java技术在互联网行业的快速发展,引起了很多人的关注,大家都想通过学习java技术来加入到这个行业,那么零基础学java培训怎么选择学校呢?如今市面上的java培训机构这么多,下面小编就来为大家详细 ...

  9. 零基础学Java需要做哪些准备

    想要成为一名合格的java工程师,那么好好学习java技术是非常重要的,对于零基础同学们来说,大家比较关注的就是"零基础学Java需要做哪些准备"这个问题,下面小编就来为大家做下详 ...

  10. 零基础学Java大数据难不难

    java大数据如今在企业中用到的次数是非常多的,很多人都比较看好java技术,那么零基础学Java大数据难不难?想要学习java技术说难不难,说简单也不是很简单,来看看下面的详细介绍就知道了. 零基础 ...

最新文章

  1. 取消MySQL timestamp列默认ON UPDATE CURRENT_TIMESTAMP
  2. python官网 中文版 新闻-他说,懂中文就能学会Python,但需要这个工具
  3. ubuntu下搭建java web开发环境的详细步骤
  4. JUnit 5测试中的临时目录
  5. case计算机英语,计算机英语常用术语
  6. 明天支付宝就开始提现收费了!这几招可以让你受用
  7. 理解AOP思想(面向切面编程)
  8. Big Sur系统更新后,运行变慢?使macOS Big Sur更快运行的12个技巧
  9. 中华黑豹计算机病毒,关于“中华黑豹病毒”
  10. 红米手机Pro超简单刷入开发版获得ROOT超级权限的步骤
  11. 使用Pr编辑字幕-快闪效果
  12. 数模笔记(四):插值与拟合1.0
  13. 计算机毕业设计-基于神经网络APP-整合Vue+SpringBoot+TensorFlow框架-诗联AI
  14. OllyDbg逆向破解入门攻略?拿来吧你!
  15. mysql判断题题库_MySQL数据库考试试题及答案
  16. 联邦学习论文阅读笔记
  17. python opencv 三维重建_三维重建 3D Reconstruction
  18. Genymotion 自配 AndoidSDK 一直Booting
  19. IDC报告出炉,ZDNS连续五年DDI领域市场占有率第一
  20. 高德地图 绘制 柱状图形

热门文章

  1. aspcms模板转php,aspcms转换zzzcms,aspcms迁移数据,aspcms替换模板,aspcms模板转换-下载-zzzcms官网-开源免费建站系统...
  2. 手机java做贪吃蛇_如何用Java写一个贪吃蛇游戏
  3. 使用 vscode将本地项目上传到github、从github克隆项目以及删除github上的某个文件夹...
  4. 【uoj#174】新年的破栈 贪心
  5. Day24-Ajax文件上传
  6. SaltStack 部署案例 02
  7. ANDROID调用webservice带soapheader验证
  8. PHP判断文件夹是否存在和创建文件夹的方法
  9. 解决PowerDesigner中Name与Code同步的问题
  10. 设计模式:Abstract Factory和Builder(比较区别,个人认为讲得很明白)