eclipse运行结果截图:
源码:
/**
* 尚学堂第九章练习题解答
* @author 绝尘
*
*一、选择题
* 建议:将代码赋值到程序中检验。
* 答案:
* 1.CD——Map中每个元素不仅仅是一个键值对,还有hashCode、next信息
* 2.A——索引越界
* 3.D
* 4.C
* 5.C——键值key相同,被覆盖
*
*三、编码题
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class SxtExercise09 {
public static void main(String[] args) {
/*
* 1.
*/
System.out.println("第一题输出结果:");
//新建一些书籍信息
Book book1 = new Book(1000, "神雕侠侣", 30, "北京大学出版社");
Book book2 = new Book(1001, "笑傲江湖", 25, "北京大学出版社");
Book book3 = new Book(1002, "射雕英雄传", 30, "北京大学出版社");
Book book4 = new Book(1003, "鹿鼎记", 40, "北京大学出版社");
Book book5 = new Book(1003, "鹿鼎记", 40, "北京大学出版社");
Book book6 = new Book(1004, "鹿鼎记", 40, "北京大学出版社");
// 1.1 新建一个bookMap用来存放所有的书籍信息
Map<Integer,Book> bookMap = new HashMap<Integer, Book>();
// 将所有书籍信息存入bookMap
bookMap.put(book1.getId(), book1);
bookMap.put(book2.getId(), book2);
bookMap.put(book3.getId(), book3);
bookMap.put(book4.getId(), book4);
// 遍历打印书籍信息
Set<Integer> keySet = bookMap.keySet();
for(Integer key:keySet) {
System.out.println(bookMap.get(key));
}
System.out.println("---------------------------------------------------");
// 1.2 新建一个bookList来存放所有书籍信息
List<Book> bookList = new ArrayList<Book>();
// 将所有书籍信息存入bookList
bookList.add(book1);
bookList.add(book2);
bookList.add(book3);
bookList.add(book4);
// 遍历打印书籍信息
for(Book book:bookList) {
System.out.println(book);
}
System.out.println("###########################");
/*
* 2.
*/
System.out.println("第二题输出结果:");
// 新建一个bookHashSet用来存放图书信息
Set<Book> bookHashSet = new HashSet<Book>();
bookHashSet.add(book4);//id=1003,先将book4放进去
bookHashSet.add(book5);//id=1003,不能放进去,首先因为hashCode相同,再对比equals时id也相同,所以放不进去
bookHashSet.add(book6);//id=1004,能放进去,hashCode不同就直接放进去了
System.out.println(bookHashSet.size());
System.out.println("###########################");
/*
* 3.
*
*/
System.out.println("第三题输出结果:");
Map<Integer,StudentEntry> stuMap = new HashMap<>();
StudentEntry stu1 = new StudentEntry(1000, "张三", 22, "男");
StudentEntry stu2 = new StudentEntry(1001, "李四", 23, "男");
StudentEntry stu3 = new StudentEntry(1002, "王五", 26, "男");
StudentEntry stu4 = new StudentEntry(1003, "赵六", 21, "男");
stuMap.put(stu1.id, stu1);
stuMap.put(stu2.id, stu2);
stuMap.put(stu3.id, stu3);
stuMap.put(stu4.id, stu4);
List<StudentEntry> stuList = new ArrayList<>();
Set<Entry<Integer,StudentEntry>> set = stuMap.entrySet();
for(Map.Entry<Integer,StudentEntry> s:set) {
stuList.add(s.getValue());
}
// Map中value(StudentEntry类)显示
System.out.println(stuList.get(0));
System.out.println(stuList.get(1));
System.out.println(stuList.get(2));
System.out.println(stuList.get(3));
}//main方法
}
class StudentEntry extends Student{
public StudentEntry() {
super();//调用父类不含参构造器
}
// 父类非空构造器不能继承,所以需要重写
public StudentEntry(int id, String name, int age, String sex) {
super(id, name, age, sex);//调用父类含参构造器
}
}
class Student{
int id;
String name;
int age;
String sex;
public Student(int id, String name, int age, String sex) {
super();
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
public Student() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "id:"+id+",name:"+name+",age:"+age+",sex:"+sex;
}
}
class Book{
int id;
String name;
double price;
String company;
public Book(int id, String name, double price, String company) {
super();
this.id = id;
this.name = name;
this.price = price;
this.company = company;
}
int getId() {
return id;
}
@Override
public String toString() {
return "id:"+id+",name:"+name+",price:"+price+",company:"+company;
}
@Override
public int hashCode() {
return id;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Book) {
Book newBook = (Book)obj;
if(newBook.getId()!=this.getId())
return false;//id不同,放返回false,就可以放进去了
else {
return true;
}
}else {
return false;
}
}
}