[零基础学JAVA]Java SE应用部分-35.JAVA类集之二
· 面向对象
· 类集框架
· JDBC
· 文件编程
· Collection
· List
· Set
· Map
· Iterator
· ListIteator
· Enumeration
· for…each语句(JDK 1.5的新特性)
· Comparable接口
· 二叉树
1、存放单值:Collection
2、存放一对值:Map
3、输出:Iterator
<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的注意点:
例如,一个学校里有多个学生?问如何可以表现出关系
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());
}
}
}
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());
}
}
}
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());
}
}
}
}
例如有一种情况:
一个学生可以选多门课程,一门课程允许有多个学生参加。
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());
}
}
}
转载于:https://blog.51cto.com/redking/139795
[零基础学JAVA]Java SE应用部分-35.JAVA类集之二相关推荐
- 零基础带你学习MySQL—多表查询笛卡尔集(二十)
零基础带你学习MySQL-多表查询笛卡尔集(二十) 一.多表查询 多表查询:就是指基于两个和两个以上的表的查询,在实际应用中,单个表并不能满足你的需求,我们经常需要在很多个表之间查询数据 二.笛卡尔集 ...
- 零基础学手绘彩铅,这些技巧美术集网校都整理好了,收藏起来吧~
对于刚刚入门学习手绘彩铅的同学,可能会遇上很多问题,比如颜色怎么搭配:怎么重叠颜色?彩铅画为什么画不了很艳丽的颜色?等一些问题.彩铅其实和普通的铅笔是一样的,在手绘时也是一个比较容易掌握的绘画工具.利 ...
- 零基础学python编程思维(九) | 面向对象的编程——类
对象可以包含任意数量和类型的数据.Python在尽可能不增加新的语法和语义的情况下加入了类机制,类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以 ...
- 零基础学鸿蒙编程-UI控件_DatePicker
什么是DatePicker DatePicker是一种日期滚轮式选择器.常见效果如下: 1.基本用法 效果图 代码 <DatePickerohos:height="match_cont ...
- [零基础学JAVA]Java SE实战开发-37.MIS信息管理系统实战开发[JDBC](1)
MIS信息管理系统实战开发之使用MySQL实现保存 开发背景 ID.姓名.年龄为公共信息,而学生有成绩,工人有工资 定义一个抽象类Person(ID.姓名.年龄),学生是其子类,有成绩,工人是其子类有 ...
- [零基础学JAVA]Java SE实战开发-37.MIS信息管理系统实战开发[文件保存](1)
MIS信息管理系统实战开发之单独使用文件实现保存 开发背景 ID.姓名.年龄为公共信息,而学生有成绩,工人有工资 定义一个抽象类Person(ID.姓名.年龄),学生是其子类,有成绩,工人是其子类有工 ...
- java无线电台RS制信号_中国MOOC_零基础学Java语言_第2周 判断_2信号报告
2 信号报告(5分) 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength) 信号强度即大小. 其中R位于报告第一 ...
- 零基础学java培训怎么选择学校
java技术在互联网行业的快速发展,引起了很多人的关注,大家都想通过学习java技术来加入到这个行业,那么零基础学java培训怎么选择学校呢?如今市面上的java培训机构这么多,下面小编就来为大家详细 ...
- 零基础学Java需要做哪些准备
想要成为一名合格的java工程师,那么好好学习java技术是非常重要的,对于零基础同学们来说,大家比较关注的就是"零基础学Java需要做哪些准备"这个问题,下面小编就来为大家做下详 ...
- 零基础学Java大数据难不难
java大数据如今在企业中用到的次数是非常多的,很多人都比较看好java技术,那么零基础学Java大数据难不难?想要学习java技术说难不难,说简单也不是很简单,来看看下面的详细介绍就知道了. 零基础 ...
最新文章
- 取消MySQL timestamp列默认ON UPDATE CURRENT_TIMESTAMP
- python官网 中文版 新闻-他说,懂中文就能学会Python,但需要这个工具
- ubuntu下搭建java web开发环境的详细步骤
- JUnit 5测试中的临时目录
- case计算机英语,计算机英语常用术语
- 明天支付宝就开始提现收费了!这几招可以让你受用
- 理解AOP思想(面向切面编程)
- Big Sur系统更新后,运行变慢?使macOS Big Sur更快运行的12个技巧
- 中华黑豹计算机病毒,关于“中华黑豹病毒”
- 红米手机Pro超简单刷入开发版获得ROOT超级权限的步骤
- 使用Pr编辑字幕-快闪效果
- 数模笔记(四):插值与拟合1.0
- 计算机毕业设计-基于神经网络APP-整合Vue+SpringBoot+TensorFlow框架-诗联AI
- OllyDbg逆向破解入门攻略?拿来吧你!
- mysql判断题题库_MySQL数据库考试试题及答案
- 联邦学习论文阅读笔记
- python opencv 三维重建_三维重建 3D Reconstruction
- Genymotion 自配 AndoidSDK 一直Booting
- IDC报告出炉,ZDNS连续五年DDI领域市场占有率第一
- 高德地图 绘制 柱状图形
热门文章
- aspcms模板转php,aspcms转换zzzcms,aspcms迁移数据,aspcms替换模板,aspcms模板转换-下载-zzzcms官网-开源免费建站系统...
- 手机java做贪吃蛇_如何用Java写一个贪吃蛇游戏
- 使用 vscode将本地项目上传到github、从github克隆项目以及删除github上的某个文件夹...
- 【uoj#174】新年的破栈 贪心
- Day24-Ajax文件上传
- SaltStack 部署案例 02
- ANDROID调用webservice带soapheader验证
- PHP判断文件夹是否存在和创建文件夹的方法
- 解决PowerDesigner中Name与Code同步的问题
- 设计模式:Abstract Factory和Builder(比较区别,个人认为讲得很明白)