Map接口和equals重写

Map接口与equals的重写

  • 一.Map接口
  • 二.重写equals与Map应用

一.Map接口

Map接口存储一组成对的键(key)——值(value)对象,提供key到value的映射,通过key来检索。Map接口中的key不要求有序,不允许重复。value同样不要求有序,但允许重复。
Map接口的常用方法

方法 说明
Object put(Object key,Object value) 将相互关联的key,value放入集合,如果此map接口中已经包含了key对应的value,则旧值被替换
remove(Object key) 移除与指定key相关的映射,并返回改key关联的旧value。如果key没有关联,返回null
Object get(Object key) 获得与key相关的value。如果key不关联任何非null值,则返回null
bollean containsKey(Object key) 判断集合中是否存在key
bollean isEmpty() 判断集合中是否存在元素
void clear() 清楚集合中的所有元素
int size() 返回集合中元素的数量
Set keySet 获取所有key的集合
Collection values() 获取所有value集合

二.重写equals与Map应用

让我们来看看下面的小题目:
定义图书类Book,具有属性账号id,书名name、作者author 和价格price,
在创建图书对象时要求通过构造器进行创建,一次性将四个属性全部赋值,
1)要求账户属性是int型,名称是String型,作者是String型,价格是double,
请合理进行封装。
2)在Book类,添加toString方法,要求返回 图书信息字符串,使用\t隔开各信息
3)要求定义一个图书馆Library类,在图书馆类中添加一个集合用于保存多本图书
4)在图书馆类中要求能够新增图书
5)在图书馆类中要求可以查看所有添加过的图书
6)不允许添加重复的图书(如果账号id和书名name相同,则认为两本书是相同的)
(重写equals方法)
book类

public class Book {
    private int id;
    private String name;
    private String author;
    private double price;

    public Book() {
    }

    public Book(int id, String name, String author, double price) {
        this.id = id;
        this.name = name;
        this.author = author;
        this.price = price;
    }

    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 String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

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

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                '}';
    }
    public boolean equals(Object obj){
        if(obj instanceof Book){
            Book book1=(Book)obj;
            if(this.getId()==book1.getId()
                    && this.getName().equals(book1.getName())){
                return true;
            }
        }return false;
    }
}

Library类

public class Library {
    public static void main(String[] args) {
        HashMap<Integer,Book> books = new HashMap();
        String chose;
        Scanner sc = new Scanner(System.in);
        System.out.println("欢迎来到天上人间藏书阁");
        int keyId=1;
        do {
            System.out.println("请输入图书账号");
            Book b = new Book();
            b.setId(sc.nextInt());
            System.out.println("请输入图书名称");
            b.setName(sc.next());
            System.out.println("请输入图书作者");
            b.setAuthor(sc.next());
            System.out.println("请输入图书的价格");
            b.setPrice(sc.nextDouble());
            boolean flag = true;
            Collection c=books.values();
            for (Object o : c) {
                if (o.equals(b)) {
                    System.out.println("不允许重复添加图书!");
                    flag = false;
                    break; }
            }
            if (flag) {
                books.put(keyId++, b);
            }

            System.out.println("您还有继续输入吗(yes/no)");
            chose = sc.next();
        } while (chose.equals("yes"));
        System.out.println("输入完成!");
        System.out.println("如果需要查看图书,请输入yes,否则no");
        if (sc.next().equals("yes")) {
            Set entry = books.entrySet();
            for (Object o : entry) {
                System.out.println(o);
            }
        }
        else System.out.println("欢迎下次光临");
    }
}

你可能感兴趣的:(Map接口和equals重写)