尚学堂第九章课后习题参考

选择题

1.AC
解析:List和Set是collection的子接口,而非collections的子接口

2.A
解析:第二个add超出了范围,故在运行时错误

3.D
解析:ArrayLis和LinkListt是有序的,可重复的;TreeMap是有序的;

4.C
解析:HashSet是不可重复的,故相同的“abc”没有被存储进去,且地址大小是从“1”开始的。

5.C
解析:map.size( )得到的值是从下标0开始的(原因是这里为HashMap),题中存在两个元素,故下标为1

简答题

1.集合和数组的比较?

解答:数组的优势在于查询快,效率比较高,从效率和类型检查的角度来看,数组是最好的。但是在于数组不灵活,需要实现定义,不可以随着需求的扩大而扩容。所以需要一种可以随时改变的容器,集合。集合是在数据的基础上进行的改良。

2.简述List、Set、Map、Collection的区别和联系

解答:List和Set都是Collection的子接口,List和Set的方法近似,且都拥有Collection接口的方法。但是List是指的有序的,可重复的容器,但Set是无序的,不可重复的容器。Map接口是运用二叉树进行存储实现的容器,是有序的,使用键值对进行存储的容器。

3.简述ArrayList和LinkList的区别和联系,他们的底层都是用什么实现的?

解答:ArrayList的查询效率不高,删改程度低,线程不安全;LinkList的查询效率高,删改程度高,线程不安全。ArrayList的底层是由数组来实现,LinkList是由双链表进行实现。

4.HashSet采用了哈希表作为存储结构,请说明哈希表的特点和实现原理?

解答:哈希表的特点——使用了数据和链表结合的方式进行存储数据;
实现原理:

  1. 首先调用key对象的hashcode()方法,计算得到hashcode值
  2. 根据hashcode计算出hash值,该处理方法有三种(一)hash值=hashcode/hashcode(二)hash=hashcode%数组长度(三)hash=hashcode&(length-1),采用位运算;不管何种方法,都是将hash值取值范围在【0,length-1】之间
  3. 生成Entry对象
  4. 将Entry对象保存在table数组中
    总结:首先计算key的hash值,确定插入的位置,但是可能存在同一hash值的元素已经被放置在数组同一位置的情况,这时就将其添加在同一hash值的元素的后面。则在数据中存在了链表。

5.使用泛型有什么好处?

解答:使用泛型遍历集合中,不需要进行数据类型的强制转换。提高了代码的可读性和安全性。

编程题

1.使用List和Map存放多个图书信息,遍历并输出,其中商品包括编号,名称,单价,出版社,使用商品编号作为Map中的key。


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Question01 {
    public static void main(String aaa[]){
        Map<Integer,List<String> > m1 = new HashMap<>();
        List<String> l1 = new ArrayList<>();
        m1.put(001,addList("hello","100","人民出版社"));
        System.out.println(m1);
    }
    public static List addList(String name,String price,String publish){
        List<String> l2 = new ArrayList<>();
        l2.add(name);
        l2.add(price);
        l2.add(publish);
        return l2;
    }
}

2.使用HashSet和TreeMap进行存储与列一相同的商品信息。

package cn.istell.packge.parctice06;

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.TreeSet;
/*
对于HashSet,需要对hashCode()和equals()进行重写
对于TreeMap,需要对compareTo()进行重写------这里我也不清楚这三个方法,自卑
需要新建一个泛型
 */
class shop implements Comparable<shop>{
    String id;
    String name;
    String price;
    String publish;

    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 String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public String getPublish() {
        return publish;
    }

    public void setPublish(String publish) {
        this.publish = publish;
    }

    public shop(String id, String name, String price, String publish){
        this.id = id;
        this.name = name;
        this.price = price;
        this.publish =  publish;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        shop shop = (shop) o;
        return Objects.equals(id, shop.id) &&
                Objects.equals(name, shop.name) &&
                Objects.equals(price, shop.price) &&
                Objects.equals(publish, shop.publish);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, price, publish);
    }

    @Override
    public int compareTo(shop o) {
        return 0;
    }

    public String toString(){
        return "id="+id+",name="+name+",price="+price+",publish="+publish;
    }
}
public class Question02 {
    public  static void main(String xxp[]){
        shop s1 = new shop("001","hello","100","人民出版社");
        shop s2 = new shop("001","hello","100","人民出版社");
        shop s3 = new shop("001","hello","100","人民出版社");
        shop s4 = new shop("001","hello","100","人民出版社");
        shop s5 = new shop("001","hello","100","人民出版社");
        Set<shop> h1 = new HashSet<>();
        h1.add(s1);
        h1.add(s2);
        h1.add(s3);
        h1.add(s4);
        h1.add(s5);
        System.out.println(h1);
        System.out.println("------------------------------------");
        Set<shop> t1 = new TreeSet<>();
        t1.add(s1);
        t1.add(s2);
        t1.add(s3);
        t1.add(s4);
        t1.add(s5);
        System.out.println(t1);
    }
}

3.实现List和Map数据的转换

package cn.istell.packge.parctice06;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;

class Student02{
    int id;
    String name;
    int age;
    String sex;
//---------------------------开始封装--------------------------
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    public Student02(int id,String name,int age,String sex){
        this.id = id;
        this.age = age;
        this.name = name;
        this.sex = sex;
    }
    //------------------------------封装结束--------------------------
    public String toString(){
        return "id:"+id+",name:"+name+",age:"+age+",sex:"+sex;
    }
}
class StudentListToMap{
    HashMap<Integer,Student02> map;
    List<Student02> list;
//--------------------------开始封装-------------------------
    public HashMap<Integer, Student02> getMap() {
        return map;
    }

    public void setMap(HashMap<Integer, Student02> map) {
        this.map = map;
    }

    public List<Student02> getList() {
        return list;
    }

    public void setList(List<Student02> list) {
        this.list = list;
    }

    //------------------------------构造方法---------------------
    public StudentListToMap(List<Student02> list){
        this.list = list;
        this.map = new HashMap<>();
    }
    
    //------------------------------处理方法-------------------
    public void listToMap(List<Student02> list){
        for(int i = 0; i < list.size();i++){
            this.map.put(list.get(i).id,list.get(i));
        }
    }
    
    public void show(){
        for(int i = 0; i < map.size(); i++){
            System.out.println(map.get(list.get(i).id));
        }
    }
}
class StudentMapToList{
    HashMap<Integer,Student02> map;
    List<Student02> list;
    //-----------------封装-------------------
    public HashMap<Integer, Student02> getMap() {
        return map;
    }

    public void setMap(HashMap<Integer, Student02> map) {
        this.map = map;
    }

    public List<Student02> getList() {
        return list;
    }

    public void setList(List<Student02> list) {
        this.list = list;
    }
    //-------------------构造方法------------------------------
    public StudentMapToList(HashMap<Integer,Student02> map){
        this.map = map;
        this.list = new ArrayList<Student02>();
    }
    //---------------------实现方法----------------------------
    
    public void mapToList(List<Student02> list){
        for(int i = 0; i < list.size();i++){
            this.list.add(map.get(list.get(i).getId()));//获取
        }
    }

    //---------------------------输出数据----------------------------
    public void show(){
        for(int i = 0; i < list.size(); i++){
            System.out.println(list.get(i));
        }
    }
}
public class Question03 {
    public  static  void  main(String xx[]){
        Student02 s1 = new Student02(10,"xx",20,"man");
        Student02 s2 = new Student02(20,"xx",20,"man");
        Student02 s3 = new Student02(30,"xx",20,"man");
        Student02 s4 = new Student02(40,"xx",20,"man");
        Student02 s5 = new Student02(50,"xx",20,"man");
        List<Student02> list = new ArrayList<>();
        //添加数据,通关建立一个list类的实例化对象
        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);
        list.add(s5);
        StudentListToMap temp1 = new StudentListToMap(list);
        //进行转换,listToMap中的形式参数为list<Student02>
        temp1.listToMap(list);
        temp1.show();
        System.out.println("----------------------------------");
        //直接从StudentListToMap中得到返回值Map类型的对象
        StudentMapToList temp2 = new StudentMapToList(temp1.getMap());
        temp2.mapToList(list);
        temp2.show();
    }
}

第三问不熟悉,参考链接:这个怎么设置,点击这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值