尚学堂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++ < ...
随机推荐
- 力扣(LeetCode) 104. 二叉树的最大深度
给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null,15,7], ...
- 虹软人脸识别 arcface2.0 安卓版本
虹软官方网站提供了 AndroidStudio 版本的arcface2.0,我花了 几天的时间整理了一个 ADT版本的源码, 是自己从 官方 2.0 android版本中转换而来的.已经测试了,可 ...
- django数据库的增、删、改、查
1.增加 第一种:save 通过创建模型类对象,执行对象的save()方法保存到数据库中. 第二种:create 2.修改 3.查询 get 查询单一结果,如果不存在会抛出模型类.DoesNotExi ...
- Asp.net core 学习笔记 ( OData )
2018-12-10 更新 : 从前我都是把 entity 直接用于 odata 曝露 api 给程序用. 如果这个程序是我们自己写的前端,这样的方式非常好,因为就好比前端可以直接对数据库每一个表做操 ...
- Appium的工作原理
把我们写的python语言代码,看做客户端 通过客户端向appium服务器发送请求 appium服务器把我们的代码转换成手机可以识别的指令 然后把指令发给手机,手机根据指令做出相应的操作 最后手机把操 ...
- Android DatePickerDialog 使用方法
(一)在Android 4.0以上系统的某些手机(如本人的测试机红米Note(系统4.4.4),以及模拟器(系统4.0)),使用如下代码创建时间选择器时,页面效果如图: Calendar cal = ...
- 拖图UI和纯代码UI
1拖图UI, 优点:适合快速实验各种天马行空的想法 缺点:太多的storyBoard不好管理,不适合较大的项目,如果一个项目有价值,或成熟了,为了维护拓展,就最好改为纯代码 2纯代码UI 优点:1好维 ...
- RLE Plots: relative log expression
RLE Plots: Visualising Unwanted Variation in High Dimensional Data 参考:RLE Plots: Visualising Unwante ...
- English trip EM2-LP-6B Teacher:Gabriele
Gabriele Gabi n. 加布里尔,加布里埃尔,加布里埃,加布里埃莱(人名) 课上内容(Lesson) 词汇(Key Word ) is married? 结 ...
- python3-知识扩展扫盲易忘-generator的用法
前部分转自: https://www.cnblogs.com/Tsukasa/p/6613934.html 通过列表list生成器,我们可以直接创建一个列表 ? 1 2 3 >>> ...