《Java大学教程》—第17章 Java聚焦类框架
由所有聚焦类构成,在java.util包中,包含三个重要接口:
* List列表:元素为单个对象,元素在列表中是有序、可重复
* Set集合:元素为单个对象,元素在集合中无序、不可重复
* Map映射:元素为成对对象(第一个对象是关键字,第二个对象是值),元素在映射中无序,关键字不可重复
注:JCF不能存储基本数据类型。
17.2 List接口和ArrayList类
* ArrayList类
* LinkedList类
17.2.1 泛型(generics):允许设定存在在特定聚焦类对象中的对象类型。可以将一个或多个类型作为参数发送到一个类(或接口)中,亦被称为参数化类型。
优点:允许编译检查类型;不必进行对象类型转换;避免产生ClassCastException异常。
17.2.2 使用接口类型代替实现类型作为函数的形参
允许将来修改实现的方式而不必修改形参中对象的类型。
17.2.3 List接口的方法
操作:增加(add)❶将元素插在列表的末尾;❷将元素插入到列表中指定的位置。
注:使用索引插入参数到列表中时,必须保证索引是当前列表中的有效位置
修改(set)、删除(delete)
列表:显示(toString)、总数(size)、是否空(isEmpty)
元素:位置(indexOf)返回指定对象在列表中第一次出现时的索引。
获取(get)、存在(contains)
17.3 增强的for循环:数组、List接口、Set接口
不能用于修改或删除原始集合中的元素,因为编译可以通过,但是有可能导致程序结果不可预测。
17.4 Set接口和HashSet类
* HashSet类
* TreeSet类
17.4.1 Set接口的方法
操作:增加和修改(add)、删除(remove)
列表:显示(toString)、总数(size)、是否空(isEmpty)
元素:获取(get)、存在(contains)
17.4.3 Iterator接口:用于修改和删除Set中的元素
使用Set对象中提供的Iterator对象。
17.5 Map接口和HashMap类
* HashMap类
* TreeMap类
Map接口的方法:
操作:增加和修改(put)、删除(remove)
元素:关键字存在(containsKey)、值存在(containsValue)、值获取(get)
17.6 JCF中使用自定义类
方法重写:toString(); equals(); hashCode()
自测题:
1. 三种接口的区别:
* List列表:元素为单个对象,元素在列表中是有序、可重复
* Set集合:元素为单个对象,元素在集合中无序、不可重复
* Map映射:元素为成对对象(第一个对象是关键字,第二个对象是值),元素在映射中无序,关键字不可重复
2. Map<String, Student> javaStudents = new HashMap<String, Student>();
a) 允许将来修改实现的方式而不必修改形参中对象的类型。
b) 可以将一个或多个类型作为参数发送到一个类(或接口)中,亦被称为参数化类型。
优点:允许编译检查类型;不必进行对象类型转换;避免产生ClassCastException异常。
c) javaStudents.put("U0012345","Fadi");
javaStudents定义的是Student类型,不能接收String类型的数据。
3. StockItem类
a)
public String toString(){
return "("+stockNumber+","+name+","+price+","+totalStock+")\n";
}
b)
public boolean equals(Object objIn){
StockItem st = (StockItem) objIn;
return stockNumber.equals(st.stockNumber);
}
c)
public int hashCode(){
return stockNumber.hashCode();
}
4.
a)
String tmpString;
boolean first=true;
if (regNums.size()==0){
tmpString="{}";
} else {
StringBuilder sb = new StringBuilder();
for (String item: regNums){
if (first) {
sb.append("{"+item);
first = false;
} else {
sb.append(","+item);
}
}
sb.append("}");
System.out.println(sb);
b)
Iterator<String> elements = regNums.iterator();
while(elements.hasNext()){
String item = elements.next();
if (item.charAt(item.length()-1)=='S'
elements.remove();
}
编程练习:代码附件
1. NameStack.java NameStackException.java NameStackTest.java
a) 因为需要可变大小的存储空间,而存储的对象必须是有序的,但是是可以重复的。
2. CarRegister.java CarRegisterException.java CarRegisterTest.java
a) 因为需要可变大小的存储空间,而存储的对象可以是无序的,但是必须惟一。
3. Book.java Library.java LibraryTest.java
4. Bank.java BankAccount.java BankTest.java
a) HashMap类适合代替数组实现Bank类。因为其可以满足成对对象集合的需要,还可以确定关键字。
《Java大学教程》—第17章 Java聚焦类框架的更多相关文章
- 正在学习的Java大学教程
推荐本书<Java大学教程> 看的人比较少,我也是多年不看书了,基于教程一般选国外的方法,从图书馆选了本书. 看了一半,感觉书的内容比较认真,对于基本的Java知识都算介绍全了,而且全书是 ...
- 《Java大学教程》—第14章 抽象、继承和接口
自测题:1. 解释抽象和抽象数据类型的概念.P333抽象的概念是仅仅关注对象可以完成什么工作,而不必担心如何完成工作的细节.类模板通常被称为抽象数据类型.因为这类数据暴露给用户的所有信息仅仅是方 ...
- 《Java大学教程》—第12章 案例研究--第2部分
本章就是上一章的延续,主要是用GUI实现了控制界面. 编程练习:代码附件Hostel.java1. 正确运行2. Runhostel.java3. searchButton
- 《Java大学教程》—第9章 软件质量
软件质量:可维护性.可靠性.健壮性.可用性. 9.3 可维护性系统维护(maintaining)是指根据需求的变化更新现有系统的过程 9.3.1 封装的重要性连锁反应:对系统某一部分的改变可能会 ...
- 《Java大学教程》—第8章 通过继承扩展类
8.2 继承(inheritance):继承是指在类之间共享属性和方法.继承关系是一种层次关系.在继承关系中位于顶部的类称为超类(或基类),位于下面的类称为子类(或派生类).类型转换(type ...
- 《Java大学教程》—第6章 类和对象
6.2 对象:结构化编程-->数据-->封装(聚合,信息隐藏)-->对象(方法及其操作的数据都聚合在一个单元中,作为更高层的组织单元)-->类(创建对象的模板)6.3 类:* ...
- 《Java大学教程》--第1章 步入Java世界
1.2 软件:用于计算机执行的指令的集合称之为程序(program).单个程序或者一组程序称之为软件(software)1.3 编译:计算机的语言称为机器码(machine code).用编译器(co ...
- Java编程思想——第17章 容器深入研究 读书笔记(三)
七.队列 排队,先进先出. 除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: ad ...
- Java编程思想——第17章 容器深入研究(two)
六.队列 排队,先进先出.除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: add ...
随机推荐
- 适用于WebApi的SQL注入过滤器
开发工具:Visual Studio 2017 C#版本:C#7.1 最有效的防止SQL注入的方式是调用数据库时使用参数化查询. 但是如果是接手一个旧的WebApi项目,不想改繁多的数据库访问层的代码 ...
- SQL命令入门。
1.创建数据库:create database ***: 2.删除数据库:drop database ***: 3.创建数据库的时候设置一些参数选项. create database MyDatab ...
- 23.QT记事本
描述 主要功能有: 新建,打开,保存,另存为,打印, 编辑,撤销,,拖放,xml配置文件读写,字体更改,查找替换 菜单栏,工具栏,状态栏的实现 如下图所示: 效果如下所示: 源码下载地址: htt ...
- PHP常用函数归类【持续整理中......】
一.PHP基础语法 变量,常量 严格区分大小写,但内置结构或关键字无所谓(echo) 命名:不能以数字,空格,.来开头,但是可以有汉字,eg:$变量="aa"; ...
- jsp引入本地图片
jsp引入本地图片 通用解决方法: 在tomcat的server.xml配置文件中,在<host></host>标签中间添上一句 <!-- docBase : 磁盘绝对路 ...
- Python国内豆瓣源
Python国内豆瓣源 https://pypi.doubanio.com/simple/
- bootstrap网站后台从设计到开发
前言 毕业后在一家小公司找的工作是做前端,小公司必须要身兼多职,会多门技术,所以为了工作需要自学ps,做过微信运营,后来为了做erp管理系统,又开始学习c# ,之后公司有新项目要用wpf ,我又开始学 ...
- CentOS-7.2安装Ambari-2.6.1
CentOS-7.2安装Ambari-2.6.1 一.Ambari 是什么? Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目, ...
- Cesium-知识点(Viewer)
Cesium之Viewer的构造(转自:https://blog.csdn.net/zhy905692718/article/details/78865107) Viewer属于Cesium的控件部分 ...
- WebView内存泄露的解决方案
一.简介: 做Android开发的相信都对webview不会陌生,而且也对系统自带的webview本身存在的问题也是怨念很久了,一方面是本身对js的支持不是很好另外一方面就是经常被人诟病的内存泄露了, ...