尚学堂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.

全部评论

相关推荐

07-02 13:50
闽江学院 Java
点赞 评论 收藏
分享
06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务