一.选择题

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. java环境变量---找不到或无法加载主类

    默认安装在C:\ProgramFiles\Java\jdk1.7.0目录下 环境变量配置为 PATH=.;%JAVA_HOME%\bin CLASSPATH=.;%JAVA_HOME%\lib\dt. ...

  2. (转)Qt中图片相对位置的引用

    原文作者:locky1218 原文地址:https://blog.csdn.net/locky1218/article/details/9749703/   一般使用相对位置的时候可能无法显示图片,可 ...

  3. Notepad++ 的资源管理器 右键菜单

    以前装的版本,右键[Edit With Notepad++]都可以出来的. 最近安装的总是不行. 不知道是Windows的原因,还是新版本的原因. 网上也都是用workaround去解决的. 免费的东 ...

  4. HTML第十四章总结 HTML forms

    第十四章主要讲了 html forms,通过 forms,我们可以得到 customers' feedback,使得网页能够 interactive,本章的内容分为三个部分: forms 的 elem ...

  5. boke练习: springboot整合springSecurity出现的问题,传递csrf

    boke练习: springboot整合springSecurity出现的问题,传递csrf freemarker模板 在html页面中加入: <input name="_csrf&q ...

  6. 基于C# winform实现图片流存储到文件

    本文所述实例实现将一张图片上传到指定的文件夹,然后在窗体上的PictrueBox控件中显示出来. 具体功能代码如下: private void btnUpload_Click(object sende ...

  7. H264编码 封装成MP4格式 视频流 RTP封包

    H264编码 封装成MP4格式 视频流 RTP封包         分类:             多媒体编程              2013-02-20 21:31     3067人阅读    ...

  8. 【WPF】 Behavior

    Hello,Behavior   引言         在看PDC-09大会的视频时,其中一篇讲利用Blend来扩展Silverlight元素的行 为,当时感觉很酷:在Blend中,将MouseDra ...

  9. Lab 6-1

    LABS The goal of the labs for this chapter is to help you to understand the overall functionality of ...

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

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