一.选择题

1.AC

解析:A.注意题目是Collections不是 Collection,前者是一个until下的类,后者才是接口

C.Set中的数据是无序且不能重复的

2.A

解析:将发生数组越界错误

3.D

解析:A和B都是list,有序,可以重复,C是使用二叉树实现的,也是有序的

4.C

解析:Set不可重复,重复会发生覆盖key,相当于没有添加

5.C

解析:重复会覆盖,但不会报错

二.简答题

1.数组和集合的比较

数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。如下:

· 1:数组存放基本数据类型和对象,而集合类存放的都是对象的引用,而非对象本身!

· 2:数组长度固定无法动态改变,集合类容量动态改变。 

· 3:数组无法判断其中实际存有多少元素,length只告诉了数组的容量,定义了多大的长度后,即使没有存放那么多的元素,没有存放的元素的空间就浪费了,而集合的size()可以确切知道元素的个数 

· 4:数组仅采用顺序表方式, 集合有多种实现方式和不同适用场合。

· 5:集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性即可实现各种复杂操作,大大提高了软件的开发效率

2.https://blog.csdn.net/an341221/article/details/50514664

3.Arraylist底层是数组,所以每次扩容都是创建新数组,很耗资源.LinkedList底层是双向链表,所以删添很方便

4.哈希表其实就是数组+链表,用hashCode的值作为数组的编号(KEY),然后每个数组内部放入链表(VALUE)

5.泛型可以让程序在编写时灵活转换类型,提高封装性,并且在编译时就实行类型检查,更安全

三.程序

1.

package ch9_1;

import java.util.*;

public class ch9_1 {
public static void main(String[] args) {
List<Book> listBook = new ArrayList<Book>() ;
Map<String, Book> mapBook = new HashMap(); listBook.add(new Book("0000001","老人与海",18.80,"上海教育出版社"));
listBook.add(new Book("0000002","编程思想",180,"机械印刷出版社"));
listBook.add(new Book("0000003","梦的解析",50,"清华出版社")); //注意map的存储是散列的,是按hash值来算的,所以取出数据顺序不一定和我们写的时候一样,存同理
mapBook.put("0000000",new Book("0000000","红与黑",30.5,"清华出版社"));
mapBook.put("0000001",new Book("0000001","老人与海",18.8,"上海教育出版社"));
mapBook.put("0000002",new Book("0000002","编程思想",180,"机械印刷出版社"));
mapBook.put("0000003",new Book("0000003","梦的解析",50,"清华出版社")); for (Book books: listBook) {
System.out.println("ID:"+books.getId()+"\tname:"+books.getName()+"\t price:"+books.getPrice()+"\t publishingHouse:"+books.getPublishingHouse());
}
System.out.println("++++++++++++++++++++++++++++++++++++++++++");
// for (Iterator<Map.Entry<String,Book>> it = mapBook.entrySet().iterator();it.hasNext();){
// Map.Entry e = (Map.Entry) it.next();
// System.out.println(e);
// Book printBook = (Book) e.getValue();
// System.out.println("ID:"+printBook.getId()+"\tname:"+printBook.getName()+"\t price:"+printBook.getPrice()+"\t publishingHouse:"+printBook.getPublishingHouse());
// }
Set<String> keySet = mapBook.keySet();
for (String id : keySet) {
System.out.println("ID:"+mapBook.get(id).getId()+"\tname:"+mapBook.get(id).getName()+"\t price:"+mapBook.get(id).getPrice()+"\t publishingHouse:"+mapBook.get(id).getPublishingHouse());
} } }

2.

package ch9_2;

import java.util.HashSet;
import java.util.TreeSet; public class ch9_2 { public static void main(String[] args) {
HashSet<Book> hashSet = new HashSet<Book>();
TreeSet<Book> treeSet = new TreeSet<Book>(); //hashSet需要重写hashcode方法和equals()方法
System.out.println("这里添加hashSet元素!");
hashSet.add(new Book("0000000","红与黑",30.5,"清华出版社"));
hashSet.add(new Book("0000000","老人与海",18.80,"上海教育出版社"));
hashSet.add(new Book("0000002","编程思想",180,"机械印刷出版社"));
hashSet.add(new Book("0000003","梦的解析",50,"清华出版社"));
System.out.println("hashSet:\n"+hashSet); //treeSet需要实现Comparable<T>接口
System.out.println("+++++++++++++++++++++++++++++++++++++++++\n这里添加treeSet元素!");
treeSet.add(new Book("0000000","红与黑",30.5,"清华出版社"));
treeSet.add(new Book("0000000","老人与海",18.8,"上海教育出版社"));
treeSet.add(new Book("0000003","编程思想",180,"机械印刷出版社"));
treeSet.add(new Book("0000002","梦的解析",50,"清华出版社"));
System.out.println("treeSet:\n"+treeSet); }
} package ch9_2; public class Book implements Comparable<Book> {
private String id;
private String name;
private double price;
private String publishingHouse; public Book(String id, String name, double price, String publishingHouse) {
this.id = id;
this.name = name;
this.price = price;
this.publishingHouse = publishingHouse;
} @Override
public int compareTo(Book b1){
System.out.println("这里调用了compareTo()方法");
return Integer.parseInt( this.id)-Integer.parseInt(b1.id);
} @Override
public int hashCode(){ System.out.println("我调用了hashcode()函数!");
return this.id.hashCode();
} @Override
public boolean equals(Object obj) {
System.out.println("我调用了equals()函数!");
if (this == obj)
{
return true;
}
if (obj == null)
{
return false;
}
if (getClass() != obj.getClass())
{
return false;
}
Book other = (Book) obj;
if (id != other.id)
{
return false;
}
if(id == other.id){
return true;
}
if (name == null)
{
if (other.name != null)
{
return false;
}
} else if (!name.equals(other.name))
{
return false;
}
if (publishingHouse == null)
{
if (other.publishingHouse != null)
{
return false;
}
} else if (!publishingHouse.equals(other.publishingHouse))
{
return false;
}
if (Double.doubleToLongBits(price) != Double
.doubleToLongBits(other.price))
{
return false;
}
return true;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} public String getPublishingHouse() {
return publishingHouse;
} public void setPublishingHouse(String publishingHouse) {
this.publishingHouse = publishingHouse;
} @Override
public String toString() {
return "Book{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", price=" + price +
", publishingHouse='" + publishingHouse + '\'' +
'}'+'\n';
}
}

3.

尚学堂java 参考答案 第九章的更多相关文章

  1. 尚学堂java 参考答案 第七章

    本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题 1.ACD 解析:B:java中左边不能直接直接指定长度,和C语言不一样 2.B 3.C 解析:B各行分 ...

  2. 尚学堂java 参考答案 第八章

    一.选择题 1.BD 解析:B:Integer是对象,所以默认的应该是null对象.D使用的是自动装箱 2.A 解析:String类的对象是final型,是不能修改的,concat()方法是生成一个新 ...

  3. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  4. 尚学堂Java第一课

    今天是北京尚学堂郑州分校开课的第一天,小班面授教学. 我很兴奋,是一个小白对IT大神渴求传道授业解惑的兴奋. 杨老师还是一贯耐心详细的手敲了第一堂课的完整大纲,必须给杨老师赞赞赞!!! 从幽默的制定班 ...

  5. Java编程思想 第九章 接口

    第九章 接口 抽象类和抽象方法 抽象:从具体事物抽出.概括出它们共同的方面.本质属性与关系等,而将个别的.非本质的方面.属性与关系舍弃,这种思维过程,称为抽象. 这句话概括了抽象的概念,而在Java中 ...

  6. 尚学堂java 答案解析 第六章

    本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题 1.C 解析:对void下的函数,可以使用"return;"表示结束之意,但不能&q ...

  7. 尚学堂java 答案解析 第五章

    本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题 1.AB 解析:A可以被所有类访问,B可以被当前包的所有类访问,也可以被所有子类访问 2.A 解析:所有 ...

  8. 尚学堂java答案解析 第三章

    本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题 1.A 2.BD 解析:switch的的判断表达式的数据类型:byte  short   int  ch ...

  9. 尚学堂java答案解析 第二章

    本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题: 1.CD 解析:A public是关键字. B 第一个不能是数字 2.C 解析:j=i++  < ...

随机推荐

  1. linux例行性任务(定时作业)

    linux定时作业(例行性任务) linux有两种定时作业方式: • at : 这个工作仅执行一次就从 Linux 系统中的排程中取消: • cron : 这个工作将持续例行性的作下去! at仅执行一 ...

  2. 学习笔记46—如何使Word和EndNote关联

    1)打开Word文件项目中的选项,然后点击加载项, 2)找到Endnote安装目录,选择目录中的Configure EndNote.exe,选中configuration endnote compon ...

  3. Http File Server小工具

    一般情况下,在做一些测试(比如下载服务)的时候需要提供一个http文件下载服务. 下面这个轻量级的工具HFS可以在本地提供http服务: 官网地址传送门:Http File Server

  4. python Scrapy 常见问题记录

    ImportError: No module named win32api 处理办法 windows系统上出现这个问题的解决需要安装Py32Win模块,但是直接通过官网链接装exe会出现几百个错误,更 ...

  5. Pandas存储为Excel格式:单个xlsx文件下多sheet存储方法

    Notes If passing an existing ExcelWriter object, then the sheet will be added to the existing workbo ...

  6. MySQL official tutorial

    1.installation 2.setup environment variables add %/MySQL Server/bin to path. then restart cmd/powers ...

  7. JS中循环逻辑和判断逻辑的使用实例

    源代码见: https://github.com/Embrace830/JSExample &&和||的理解 a || b:如果a是true,那么b不管是true还是false,都返回 ...

  8. 『MXNet』第八弹_数据处理API_上

    一.Gluon数据加载 下面的两个dataset处理类一般会成对出现,两个都可做预处理,但是由于后面还可能用到原始图片,.ImageFolderDataset不加预处理的话可以满足,所以建议在.Dat ...

  9. rsync未授权访问漏洞利用

    漏洞描述:rsync是Linux系统下的数据镜像备份工具,使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他ssh,rsync主机同步.也就是说如果你可以连接目标IP的r ...

  10. arp欺骗图解

    ARP协议:地址转换协议,工作在OSI模型的数据链路层,在以太网中,网络设备之间互相通信是用MAC地址而不是IP地址,ARP协议就是用来把IP地址转换为MAC地址的. 防止ARP攻击的方法: 1.使用 ...