由所有聚焦类构成,在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. MHA高可用

    MHA(Master High Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案,它由日本 DeNA 公司 youshimaton(现就职于 Facebook 公司)开 ...

  2. JVM运行时数据区内容简述

    JVM运行时数据区分为五个部分:程序计数器.虚拟机栈.本地方法栈.堆.方法区.如下图所示,五部分其中又分为线程共享区域和线程私有区域,下面将分别介绍每一部分. 1. PC程序计数器 程序计数器是一块较 ...

  3. Java高并发--安全发布对象

    Java高并发--安全发布对象 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 发布对像:使一个对象能够被当前范围之外的对象使用. 对象逸出:一种错误的发布.当一个对象 ...

  4. 怎么打开在.bashrc文件以及设置颜色

    打开/etc/bashrc,加入如下一行:   alias ls="ls --color"   下次启动bash时就可以像在Slackware里那样显示彩色的目录列表了,其中不同颜 ...

  5. react学习(四)之设置 css样式 篇

    react中设置css样式 方法一: 行内样式:使用{{  }},与正常jsx中插入js代码不一样,这里需要两个括号. <div style={ { float: 'right',} }> ...

  6. Python面试题之Python面试题汇总

    在这篇文章中: Python基础篇 1:为什么学习Python 2:通过什么途径学习Python 3:谈谈对Python和其他语言的区别 Python的优势: 4:简述解释型和编译型编程语言 5:Py ...

  7. 洛谷P4561 [JXOI2018]排序问题(二分 期望)

    题意 题目链接 Sol 首先一种方案的期望等于它一次排好的概率的倒数. 一次排好的概率是个数数题,他等于一次排好的方案除以总方案,也就是\(\frac{\prod cnt_{a_i}!}{(n+m)! ...

  8. git 入门教程之变基合并

    git 鼓励大量使用分支---"早建分支!多用分支!",这是因为即便创建再多的分支也不会造成存储或内存开销,并且分支的作用有助于我们分解逻辑工作,这样一样其实比维护单一臃肿分支要简 ...

  9. $.ajax({})方法中的回调函数beforeSend,success,complete,error使用示例

    在与后台交互的时候,经常使用到jquery的$.ajax()方法来请求数据.回调函数用的比较多的是success,但是beforeSend.complete.error函数也是很有用的.下面是使用例子 ...

  10. win7文件搜索技巧

    重要说明   (1)搜索的字符串是大小写不敏感的 (2)字符串带双引号与不带双引号是有区别的 如:hello,搜索包含hello单词开头的文件或目录,名为“aa_HELLOcc...”.“cc-Hel ...