一.选择题
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++ < ...
随机推荐
-
Qt多重继承时的信号与槽
最近在公司项目中开发串口,因为历史原因串口要包装一下,且包装类需要继承自一个纯C++类. QSerialPort可以使用slot function来获取从串口读到的数据,以及写入串口的bytes个数. ...
-
Laravel 5如何在中间件中获取路由参数?
以官方文档中间件篇的年龄为例子进行了修改 路由部分 Route::get('test/age/{age}',[ 'middleware' => 'old', 'uses'=>'Test@t ...
- ORA-12704 字符集不匹配
-
【模拟】NEERC15 E Easy Problemset (2015-2016 ACM-ICPC)(Codeforces GYM 100851)
题目链接: http://codeforces.com/gym/100851 题目大意: N个人,每个人有pi个物品,每个物品价值为0~49.每次从1~n顺序选当前这个人的物品,如果这个物品的价值&g ...
-
if(男深圳集体户口&;&;女非深圳户口)深圳准生证办理材料及流程
所需材料 一.女方需要办理流动人口婚育证明(蓝色的小本本). 办理材料.各地可能不同.这个是在女方的户籍所在地办理(最好在女方户籍所在地办理女方初婚未育证明). 二.男方在公司开出初婚未育证明. 三. ...
-
DataGridView ——管理员对用户的那点操作
记得第一次做机房收费系统的时候,就在加入删除用户这出现了点小问题,由于一直都是一个容不得一点瑕疵的人.所以对查询用户的时候查询一次就会多一些空行我非常是不能容忍.看似非常小的问题,我却花了非常长的时间 ...
-
Unity3d 复制文字到剪切板及存储图像到相册
游戏中里开发分享功能时用到两个小功能:1.复制一个链接到剪切板供在其他应用粘贴分享使用,2.保存一张二维码图像到相册供发送给其他应用用于分享.但是在unity中无法完成,需要分别开发相应的插件. An ...
-
FFT模板(BZOJ2179)
实现了两个长度为n的大数相乘. #include <cstdio> #include <cmath> #include <complex> using namesp ...
-
web前端图片上传(3)--filereader
这篇文章主要是为了介绍一种文件上传的方式.当然文件中是包含图片的.如果大家仔细看我的第一篇web前端图片上传(1)就会知道,其实也是按照这种方式上传你的,但是由于上次时间比较紧张,没有详细的介绍今天的 ...
-
Python中怎么读写文件
python中对文件的操作大概分为三步:打开文件.操作文件(读.写.追加写入).关闭文件. 1.无论对文件做哪种操作,操作前首先要保证文件被打开了,即需要一个打开的操作. 例:open(XXX.txt ...