由所有聚焦类构成,在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聚焦类框架的更多相关文章

  1. 正在学习的Java大学教程

    推荐本书<Java大学教程> 看的人比较少,我也是多年不看书了,基于教程一般选国外的方法,从图书馆选了本书. 看了一半,感觉书的内容比较认真,对于基本的Java知识都算介绍全了,而且全书是 ...

  2. 《Java大学教程》—第14章 抽象、继承和接口

    自测题:1.    解释抽象和抽象数据类型的概念.P333抽象的概念是仅仅关注对象可以完成什么工作,而不必担心如何完成工作的细节.类模板通常被称为抽象数据类型.因为这类数据暴露给用户的所有信息仅仅是方 ...

  3. 《Java大学教程》—第12章 案例研究--第2部分

    本章就是上一章的延续,主要是用GUI实现了控制界面. 编程练习:代码附件Hostel.java1.    正确运行2.    Runhostel.java3.    searchButton

  4. 《Java大学教程》—第9章 软件质量

    软件质量:可维护性.可靠性.健壮性.可用性. 9.3 可维护性系统维护(maintaining)是指根据需求的变化更新现有系统的过程 9.3.1    封装的重要性连锁反应:对系统某一部分的改变可能会 ...

  5. 《Java大学教程》—第8章 通过继承扩展类

    8.2    继承(inheritance):继承是指在类之间共享属性和方法.继承关系是一种层次关系.在继承关系中位于顶部的类称为超类(或基类),位于下面的类称为子类(或派生类).类型转换(type ...

  6. 《Java大学教程》—第6章 类和对象

    6.2 对象:结构化编程-->数据-->封装(聚合,信息隐藏)-->对象(方法及其操作的数据都聚合在一个单元中,作为更高层的组织单元)-->类(创建对象的模板)6.3 类:*  ...

  7. 《Java大学教程》--第1章 步入Java世界

    1.2 软件:用于计算机执行的指令的集合称之为程序(program).单个程序或者一组程序称之为软件(software)1.3 编译:计算机的语言称为机器码(machine code).用编译器(co ...

  8. Java编程思想——第17章 容器深入研究 读书笔记(三)

    七.队列 排队,先进先出. 除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: ad ...

  9. Java编程思想——第17章 容器深入研究(two)

    六.队列 排队,先进先出.除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: add ...

随机推荐

  1. [转]Laravel 数据库实例教程 —— 使用查询构建器实现对数据库的高级查询

    本文转自:https://laravelacademy.org/post/920.html 上一节我们简单介绍了如何使用查询构建器对数据库进行基本的增删改查操作,这一节我们来探讨如何使用查询构建器实现 ...

  2. 【转载】 Sqlserver查看数据库死锁的SQL语句

    在Sqlsever数据库中,有时候操作数据库过程中会进行锁表操作,在锁表操作的过程中,有时候会出现死锁的情况出现,这时候可以使用SQL语句来查询数据库死锁情况,主要通过系统数据库Master数据库来查 ...

  3. 【转载】C#工具类:FTP操作辅助类FTPHelper

    FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样.可以通过C#中的FtpWebRequest类.NetworkCredential类.We ...

  4. c# 对JSON字符串排序(KEY/VALUE)

    public string StortJson(string json) { var dic = JsonConvert.DeserializeObject<SortedDictionary&l ...

  5. mysql数据表的基本操作

    好久没梳理下Mysql基础命令了.今天抽空整理了下,虽然很简单...但是还是有必要巩固下基础滴啦 1.创建表:之前需要use database database_name 然后create table ...

  6. Java_IO流_抽象类

    一.   概念 流动,从一端流向另一端,源头与目的地 以程序为中心,程序与 数组/文件/网络连接/数据库, 二.   io流分类 流向:输入流与输出流 数据 :字节楼:二进制,所有文件都可以操作,包括 ...

  7. navicate 远程无法链接linux上mysql数据库问题

    1. 先确认阿里云是否放开了3306权限 (开启阿里云服务器端口) 2. 连接linux,登录数据库:mysql -uroot -p 修改root用户远程登录权限: 想myuser使用mypasswo ...

  8. html/css更改子级继承的父级属性

    一个精美的网页需要的样式很多,在父级上设置的字体颜色或者大小,在其子元素中不一定全部相同,这时候要更改其中某一项的样式怎么办呢. 很多新手朋友就不明白,会迷惑为什么我使用class单独命名了,重新设置 ...

  9. 9.Odoo产品分析 (二) – 商业板块(4) –讨论(1)

    查看Odoo产品分析系列--目录 讨论模块就是一个信息记录和消息提醒的功能,在登录到odoo平台的时候第一个界面就是它:  1. 收件箱 收件箱,登录者的邮箱管理,并显示未读邮件数量:    点击上面 ...

  10. Ubuntu添加新分区

    1.查看分区 ~$ sudo fdisk -l 2.添加分区 ~$ fdisk /dev/sda 3.输入m查看帮助 ~$ m 4.输入n新建分区,即添加分区 ~$ n 这里会出现设置分区大小 5.输 ...