尚学堂java 参考答案 第九章
一.选择题
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 参考答案 第九章的更多相关文章
- 尚学堂java 参考答案 第七章
本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题 1.ACD 解析:B:java中左边不能直接直接指定长度,和C语言不一样 2.B 3.C 解析:B各行分 ...
- 尚学堂java 参考答案 第八章
一.选择题 1.BD 解析:B:Integer是对象,所以默认的应该是null对象.D使用的是自动装箱 2.A 解析:String类的对象是final型,是不能修改的,concat()方法是生成一个新 ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- 尚学堂Java第一课
今天是北京尚学堂郑州分校开课的第一天,小班面授教学. 我很兴奋,是一个小白对IT大神渴求传道授业解惑的兴奋. 杨老师还是一贯耐心详细的手敲了第一堂课的完整大纲,必须给杨老师赞赞赞!!! 从幽默的制定班 ...
- Java编程思想 第九章 接口
第九章 接口 抽象类和抽象方法 抽象:从具体事物抽出.概括出它们共同的方面.本质属性与关系等,而将个别的.非本质的方面.属性与关系舍弃,这种思维过程,称为抽象. 这句话概括了抽象的概念,而在Java中 ...
- 尚学堂java 答案解析 第六章
本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题 1.C 解析:对void下的函数,可以使用"return;"表示结束之意,但不能&q ...
- 尚学堂java 答案解析 第五章
本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题 1.AB 解析:A可以被所有类访问,B可以被当前包的所有类访问,也可以被所有子类访问 2.A 解析:所有 ...
- 尚学堂java答案解析 第三章
本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题 1.A 2.BD 解析:switch的的判断表达式的数据类型:byte short int ch ...
- 尚学堂java答案解析 第二章
本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题: 1.CD 解析:A public是关键字. B 第一个不能是数字 2.C 解析:j=i++ < ...
随机推荐
- linux例行性任务(定时作业)
linux定时作业(例行性任务) linux有两种定时作业方式: • at : 这个工作仅执行一次就从 Linux 系统中的排程中取消: • cron : 这个工作将持续例行性的作下去! at仅执行一 ...
- 学习笔记46—如何使Word和EndNote关联
1)打开Word文件项目中的选项,然后点击加载项, 2)找到Endnote安装目录,选择目录中的Configure EndNote.exe,选中configuration endnote compon ...
- Http File Server小工具
一般情况下,在做一些测试(比如下载服务)的时候需要提供一个http文件下载服务. 下面这个轻量级的工具HFS可以在本地提供http服务: 官网地址传送门:Http File Server
- python Scrapy 常见问题记录
ImportError: No module named win32api 处理办法 windows系统上出现这个问题的解决需要安装Py32Win模块,但是直接通过官网链接装exe会出现几百个错误,更 ...
- Pandas存储为Excel格式:单个xlsx文件下多sheet存储方法
Notes If passing an existing ExcelWriter object, then the sheet will be added to the existing workbo ...
- MySQL official tutorial
1.installation 2.setup environment variables add %/MySQL Server/bin to path. then restart cmd/powers ...
- JS中循环逻辑和判断逻辑的使用实例
源代码见: https://github.com/Embrace830/JSExample &&和||的理解 a || b:如果a是true,那么b不管是true还是false,都返回 ...
- 『MXNet』第八弹_数据处理API_上
一.Gluon数据加载 下面的两个dataset处理类一般会成对出现,两个都可做预处理,但是由于后面还可能用到原始图片,.ImageFolderDataset不加预处理的话可以满足,所以建议在.Dat ...
- rsync未授权访问漏洞利用
漏洞描述:rsync是Linux系统下的数据镜像备份工具,使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他ssh,rsync主机同步.也就是说如果你可以连接目标IP的r ...
- arp欺骗图解
ARP协议:地址转换协议,工作在OSI模型的数据链路层,在以太网中,网络设备之间互相通信是用MAC地址而不是IP地址,ARP协议就是用来把IP地址转换为MAC地址的. 防止ARP攻击的方法: 1.使用 ...